2012-12-04 17 views
6

Mam funkcję, którą chcę zmienić, w tej chwili mam dwie różne wersje dla std::string i std::wstring.Szablony i stałe ciągi znaków

funkcję (demontowany) jest podobny do tego

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

T jest albo std::string lub std::wstring i _Tc jest albo char lub wchar_t. Mam problem z uzyskiwaniem stałych ciągów, które zdefiniowałem do pracy w wersji szablonu. Powyższy kod działa pod numerem std::string, ale nie dla std::wstring, ponieważ nie ma konstruktora dla std::wstring, który pobiera tablicę char*. Normalnie, aby to naprawić, zadeklarowałbym ciąg stały jako const T tofind = L"\"' ", ale wtedy nie działałby z std::string.

Nie mam dużego doświadczenia z szablonami, więc nie wiem, jak rozwiązać ten problem.

+0

@ BЈовић Cóż, tak bym pomyślał, ponieważ funkcje są identyczne – user1520427

Odpowiedz

6

Możesz przenieść kreator const do swojej własnej funkcji fabrycznej i osobno wyspecjalizować funkcję dla string i 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"\"' "); 
} 
Powiązane problemy