2011-07-07 14 views
6

मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो C++ 0x की type_traits सुविधा का उपयोग कर char & wchar_t दोनों को संभाल सकता है। हां, मुझे पता है कि टाइप_ट्रेट के बिना इसे कैसे किया जाए, लेकिन मैं सुविधा की बेहतर समझ के लिए टाइप_ट्रेट्स का उपयोग करके इसे करना चाहता हूं।क्या char_ wchar_t के बीच अंतर करने के लिए type_traits का उपयोग करना संभव है?

template <typename T> 
void SplitIt(T* base, T* ext, const std::basic_string<T>& fullFilePath, std::true_type) 
{ 
    _splitpath(fullFilePath.c_str(),NULL,NULL,base,ext); 
} 

template <typename T> 
void SplitIt(T* base, T* ext, const std::basic_string<T>& fullFilePath, std::false_type) 
{ 
    _wsplitpath(fullFilePath.c_str(),NULL,NULL,base,ext); 
} 

template <typename T> 
std::basic_string<T> GetBaseName(const std::basic_string<T>& fullFilePath) 
{ 
    T base[300], ext[50]; 

    SplitIt(base, ext, fullFilePath, /*What goes here?*/); 

    return std::basic_string<T>(buf) + ext; 
} 


int main() 
{ 
    std::basic_string<TCHAR> baseName = GetBaseName(std::basic_string<TCHAR>(__FILE__)); 
} 

क्या कोई टाइप_ट्रेट संपत्ति है जो wchar_t से char को अलग करती है?

उत्तर

7

मुझे लगता है कि वहाँ एक is_same संपत्ति है, तो

SplitIt(base, ext, fullFilePath, is_same<T, char>()); 

काम करना चाहिए।

+0

पीएफ, आसान समाधान! ... मैं इसके बारे में भी सोचने से शर्मिंदा हूं ... :( – Xeo

+0

शानदार! हालांकि यह मेरे कोड में is_same होना चाहिए। धन्यवाद। – Sharath

+0

@ भरत: ठीक है, इसे ठीक किया गया ... – MartinStettner

1

AFAICS, <type_traits> शीर्षलेख में ऐसा कुछ भी नहीं है। हालांकि, यह यह अपने आप को बनाने के लिए मामूली बात है, आप केवल के बाद से निम्नलिखित अब char के लिए std::false_type (और बाकी सब कुछ) और std::true_typewchar_t के लिए पैदावार अधिभार स्विच करने की आवश्यकता:

#include <type_traits> 

template<class T> 
struct is_wchar 
    : std::false_type 
{ 
}; 

template<> 
struct is_wchar<wchar_t> 
    : std::true_type 
{ 
}; 

// usage: 

SplitIt(base, ext, fullFilePath, is_wchar<T>()); 
+0

' 'हेडर में' is_same' संपत्ति है, जो वास्तव में इस व्यवहार को लागू करती है ... – MartinStettner

+0

धन्यवाद, यह भी बुरा नहीं है। – Sharath

संबंधित मुद्दे

 संबंधित मुद्दे