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

Check whether type is char or wchar_t in compile time

本文关键字:还是 wchar char 编译 检查 类型      更新时间:2023-10-16

我想复制一个数组(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"的调用没有匹配的函数and错误:对对"strdup"的调用不匹配的函数)。

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

您可以使用重载:

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