模板和常量字符串

时间:2012-12-04 07:20:12

标签: c++ templates

我有一个我想要模板的功能,目前我有两个不同版本的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

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

1 个答案:

答案 0 :(得分: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"\"' ");
}