2012-12-04 15 views
6

Ich habe eine Funktion Ich möchte Vorlage, im Moment habe ich zwei verschiedene Versionen für std::string und std::wstring.Templates und konstante Strings

die Funktion (stripped down) wird wie folgt

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

T entweder std::string oder std::wstring und _Tc entweder char oder wchar_t. Ich habe ein Problem damit, die von mir definierten konstanten Zeichenfolgen in der Template-Version zu verwenden. Der obige Code funktioniert für std::string, aber nicht für std::wstring, da es keinen Konstruktor für std::wstring gibt, der ein char*-Array benötigt. Normalerweise würde ich den konstanten String als const T tofind = L"\"' " deklarieren, aber dann würde es nicht mit std::string funktionieren.

Ich habe nicht viel Erfahrung mit Vorlagen und so weiß ich nicht wirklich, wie man dieses Problem beheben kann.

+0

@ BЈovieћ Nun, ich hätte das gedacht, weil die Funktionen ansonsten identisch sind – user1520427

Antwort

6

Sie können die const-Erstellung in eine eigene Factory-Funktion versetzen und die Funktion für string und wstring separat spezialisieren.

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"\"' "); 
}