2012-12-04 2 views
6

나는 템플릿을 만들고 싶습니다. 지금은 std::stringstd::wstring의 두 가지 버전이 있습니다.템플릿 및 상수 문자열

함수 (벗었)이이

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

T 같은 것은 하나 또는 std::stringstd::wstring_Tcchar 또는 wchar_t 중입니다. 템플릿 버전에서 작동하도록 정의한 상수 문자열을 가져 오는 데 문제가 있습니다. 위의 코드는 배열을 취하는 std::wstring에 대한 생성자가 없기 때문에 std::string에서는 작동하지만 std::wstring에서는 작동하지 않습니다. 일반적으로 이것을 수정하려면 상수 문자열을 const T tofind = L"\"' "으로 선언해야하지만 std::string과 작동하지 않습니다.

나는 템플릿에 많은 경험이 없으므로이 문제를 해결하는 방법을 모른다.

+0

@ BЈовић 그렇기 때문에 기능은 동일하지 않으므로 – user1520427

답변

6

const 생성을 자체 공장 기능으로 이동하고 stringwstring에 대한 함수를 별도로 특수화 할 수 있습니다.

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