关于模板函数特例化时如何处理字符指针
现有如下定义
template<typename T>
void Serializer& operator << (T& param);
当我在做 serializer << _T("test");的时候需要特例化,所以又增加了
template<typename T>
void Serializer& operator << (T* param);
如此以后是没问题了,但是在这种情况下的时候就会进入第一个函数
比如
{
TCHAR* pTest = _T("Test");
serializer << pTest; //进入第一个匹配,有错误,把TCHAR* 作为了T处理
serializer << _T("Test");//进入特例化的第二个匹配,正确
}
如果我写
template<typename T>
void Serializer& operator << (T*& param);
编译器提示无法特例化,不知道是什么原因。请问这种情况下如何处理呢?
[解决办法]
首先,我不清楚你为什么需要CSerializer& operator << (const T* data);
我觉得第一个模板已经够了。
在C++中,常量"<string>" 的类型是const char [n+1],如果穿到下面模板
CSerializer& operator << (const T& data);
相当于
typedef char TCHARARRAY[N];
CSerializer& operator << (const TCHARARRAY& data);
在用data的时候也就相当于const char* const data;
如果你一定要用第二个,写成
const TCHAR* temp = _T("abc");
试试看