2014-09-27 64 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