在编译时检查类型是char还是wchar_t

时间:2014-09-27 14:41:46

标签: c++

我想复制一个数组(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 *?

1 个答案:

答案 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