我想复制一个数组(char *或wchar_t *),我有以下功能:
template<typename T>
T* doStuff(const T* str)
{
T* newArr;
if( typeid(str).name() == typeid(const wchar_t*).name())
{
newArr = wcsdup(str);
}
else if (typeid(str).name() == typeid(const char*).name())
{
newArr = strdup(str);
}
// ...do some more
}
问题在于,当我首先使用char *参数调用该函数,然后使用wchar_t参数时,我收到编译时错误(错误:没有匹配函数用于调用&#39; wcsdup&#39; AND错误:没有匹配函数来调用&#39; strdup&#39;)。
有没有办法在编译时检查我的模板是char *还是wchar_t *?
答案 0 :(得分:3)
您可以使用过载:
wchar_t* my_dup(const wchar_t* str) { return wcsdup(str); }
char* my_dup(const char* str) { return strdup(str); }
template<typename T>
T* doStuff(const T* str)
{
T* newArr = my_dup(str);
// ...do some more
}
要回答您的问题,您可以使用std::is_same
在编译时检查T
的类型
std::is_same<wchar_t, T>::value