【发布时间】:2011-05-03 00:36:19
【问题描述】:
考虑这段代码:
template <typename T>
class String
{
public:
...
String(T* initStr)
{
size_t initStrLen;
if (initStr != NULL)
{
printf_s("%s\n", typeid(T) == typeid(char) ? "char" : "wchar_t");
if (typeid(T) == typeid(char))
{
strlen((T*)initStr);
}
else if (typeid(T) == typeid(wchar_t))
{
wcslen((T*)initStr);
}
}
}
...
};
当我编译代码时,我收到了这个错误信息:
...\main.cpp(32) : 错误 C2664: 'strlen' : 无法将参数 1 从 'wchar_t *' 转换为 'const char *'
然后我尝试使用函数指针:
typedef size_t (*STRLEN)(void*);
STRLEN _strlen;
_strlen = reinterpret_cast<STRLEN> (typeid(*initStr) == typeid(char) ? strlen : wcslen);
编译器再次发出错误,这次:
...\main.cpp(28) : 错误 C2446: ':' : 没有从 'size_t (__cdecl *)(const wchar_t *)' 转换为 'size_t (__cdecl *)(const char *)'
我的问题是,如何将函数 strlen 和 wcslen 与模板一起使用?
【问题讨论】: