C++ 模板和常量字符串
我有一个我想要模板的函数,目前我有两个不同版本的C++ 模板和常量字符串,c++,templates,C++,Templates,我有一个我想要模板的函数,目前我有两个不同版本的std::string和std::wstring 功能(精简)如下所示 template <class T, class _Tc> std::vector<T> TokenizeArgs(const T& in) { const T tofind = T("\"' "); .. do stuff .. } 模板 标准::向量标记搜索(常量T&in){ 常数T tofind=T(“\”); …做事。。 } T是st
std::string
和std::wstring
功能(精简)如下所示
template <class T, class _Tc>
std::vector<T> TokenizeArgs(const T& in) {
const T tofind = T("\"' ");
.. do stuff ..
}
模板
标准::向量标记搜索(常量T&in){
常数T tofind=T(“\”);
…做事。。
}
T
是std::string
或std::wstring
,\u Tc
是char
或wchar\u T
。我在获取我定义的常量字符串以在模板版本中工作时遇到问题。上述代码适用于std::string
,但不适用于std::wstring
,因为对于采用char*
数组的std::wstring
没有构造函数。通常要解决此问题,我会将常量字符串声明为const T tofind=L“\””
,但这样它就不能与std::string
一起使用
我没有太多的模板经验,所以我真的不知道如何解决这个问题 您可以将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"\"' ");
}
const T tofind=CreateConst();
模板
const T CreateConst();
模板
常量std::string CreateConst()
{
返回std::字符串(“\”);
}
模板
常量std::wstring CreateConst()
{
返回std::wstring(L“\””);
}
@Bццћ嗯,我会这么想,因为函数在其他方面是相同的