2012-12-04 85 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_Tc要麼charwchar_t。我遇到了一個問題,我得到了定義在模板版本中工作的常量字符串。上面的代碼適用於std::string,但不適用於std::wstring,因爲std::wstring沒有構造函數,需要char*陣列。通常爲了解決這個問題,我會聲明這個常量字符串爲const T tofind = L"\"' ",但它不適用於std::string

我對模板沒有多少經驗,所以我不知道如何解決這個問題。

+0

@BЈовић好吧,我會這麼認爲,因爲這些功能是相同的 – user1520427

回答

6

您可以將常量創建移動到自己的工廠功能中,並分別專門爲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"\"' "); 
}