2012-12-04 17 views
6

मेरे पास एक फ़ंक्शन है जिसे मैं टेम्पलेट करना चाहता हूं, इस समय मेरे पास std::string और std::wstring के लिए दो अलग-अलग संस्करण हैं।टेम्पलेट्स और निरंतर तार

समारोह (नीचे छीन) इस

template <class T, class _Tc> 
std::vector<T> TokenizeArgs(const T& in) { 
const T tofind = T("\"' "); 
.. do stuff .. 
} 

T की तरह है या तो std::string या std::wstring और _Tc या तो char या wchar_t है। मुझे टेम्पलेट संस्करण में काम करने के लिए परिभाषित निरंतर तार प्राप्त करने में कोई समस्या है। उपरोक्त कोड std::string के लिए काम करता है लेकिन std::wstring के लिए नहीं है क्योंकि std::wstring के लिए कोई कन्स्ट्रक्टर नहीं है जो char* सरणी लेता है। आम तौर पर इसे ठीक करने के लिए मैं निरंतर स्ट्रिंग को const T tofind = L"\"' " के रूप में घोषित करता हूं, लेकिन फिर यह std::string के साथ काम नहीं करेगा।

मुझे टेम्पलेट्स के साथ अधिक अनुभव नहीं है और इसलिए मुझे नहीं पता कि इस समस्या को कैसे ठीक किया जाए।

+0

@ BЈовић ठीक है, मैंने ऐसा सोचा होगा क्योंकि कार्य अन्यथा समान हैं – user1520427

उत्तर

6

आप कॉन्स निर्माण को अपने कारखाने के फ़ंक्शन में ले जा सकते हैं और string और wstring के लिए फ़ंक्शन को विशेषज्ञ बना सकते हैं।

const T tofind = CreateConst<T>(); 


template <class T> 
const T CreateConst(); 

template <> 
const std::string CreateConst<std::string>() 
{ 
    return std::string("\"' "); 
} 

template <> 
const std::wstring CreateConst<std::wstring>() 
{ 
    return std::wstring(L"\"' "); 
} 
संबंधित मुद्दे