在编译时检查类型是char还是wchar_t
Check whether type is char or wchar_t in compile time
我想复制一个数组(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
相关文章:
- enum是C++中的宏变量还是整数变量
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 在命名空间中定义函数还是限定函数
- 架构决策:返回std::future还是提供回调
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 异常属于C++中的线程还是进程
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何在C++中确定文本文件中的元素是字符还是数字
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 返回值优化:显式移动还是隐式
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在这种情况下,我真的复制了字节还是复制了字符?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- CIN是逻辑1还是0?
- 我应该使用 wchar 还是 char 来加密?