6

我有一个想要模板化的函数,目前我有两个不同的版本std::stringstd::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.

我对模板没有太多经验,所以我真的不知道如何解决这个问题。

4

1 回答 1

6

您可以将 const 创建移动到它自己的工厂函数中,并分别专门化该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"\"' ");
}
于 2012-12-04T07:29:10.077 回答