2014-09-27 70 views
0

char或wchar_t的我想复制一个数组(是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参数我得到一个编译时错误(错误:没有匹配的函数调用'wcsdup'和错误:没有匹配函数调用'strdup')。

有没有办法在编译时检查我的模板是char *还是wchar_t *?

回答

2

您可以使用过载:

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 
+0

类型的伟大工程的感谢! – Michael 2014-09-27 14:50:27