模板和常量字符串

use*_*427 6 c++ templates

我有一个我想要模板的功能,目前我有两个不同的版本std::stringstd::wstring.

功能(剥离)是这样的

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

T或者是std::stringstd::wstring并且_Tc要么是charwchar_t.我遇到一个问题,即我定义的常量字符串在模板版本中工作.上面的代码适用std::string但不适用,std::wstring因为没有构造函数std::wstring接受char*数组.通常要解决这个问题,我const T tofind = L"\"' "会将常量字符串声明为,但是它不能用于std::string.

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

Kar*_*k T 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"\"' ");
}
Run Code Online (Sandbox Code Playgroud)