考慮以下代碼:模板代碼如何在C++中查找類型爲模板參數的字符串的長度?
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的:不能從 '爲wchar_t *' 到 '爲const char *' 轉換參數1
於是我試圖用一個函數指針:
typedef size_t (*STRLEN)(void*);
STRLEN _strlen;
_strlen = reinterpret_cast<STRLEN> (typeid(*initStr) == typeid(char) ? strlen : wcslen);
,並再次發出一個錯誤的編譯器,這個時間:
... \ main.cpp中(28):錯誤C2446: ':':沒有從「爲size_t(__cdecl *)(常量爲wchar_t轉換*)」到 '的size_t(__cdecl *)(爲const char *)'
我的問題是,我怎樣才能使用的功能strlen
和wcslen
使用模板?
正確的想法,當然PrintLength(const T * s) – CashCow 2010-10-31 15:04:53