首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于模板函数特例化时如何避免字符指针

2012-06-07 
关于模板函数特例化时如何处理字符指针现有如下定义templatetypename Tvoid Serializer& operator (T

关于模板函数特例化时如何处理字符指针
现有如下定义
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");
试试看




热点排行