请教类模板特化问题
在c++ modern design中有句话:
你无法特化类的结构。单单使用templates,你无法特化 'class的结构 '(我的意思是其数据成员),你只能特化其成员函数。
请问这句话怎么理解?我的理解是特化类中不能重新定义成员变量,但我到vc7中测试如下代码确认正确通过,肯定是我理解错了,请指点。
template <class T>
class Test1
{
int i;
public:
T Hello()
{
i = 1;
j = 2;
T a;
return a;
}
};
//specification
template <>
class Test1 <char>
{
//重新定义了成员变量
char k;
public:
char Hello()
{
return 'a '; //特化成员函数
}
};
int main()
{
Test1 <int> a1;
a1.Hello();
Test1 <char> a2;
a2.Hello();
}
//可以正常运行 特化类和通用类定义应该是完全不相干的2个实体
[解决办法]
你正在做的是“特化类”,而不是“类数据成员”
数据成员因为上面不可以带templete修饰字,自然无法特化。
[解决办法]
原话是
1. You cannot specialize structure. Using templates alone, you cannot specialize the structure of a class (its data members). You can specialize only functions.
在这里可以找到作者对它的解释:
http://groups.google.com/group/comp.std.c++/browse_frm/thread/38c8d4751bcacd2/4385ca0ea5dba977?hl=en&lr=&ie=UTF-8&safe=off&rnum=5&prev=/groups%3Fq%3Dspecialize%2Bstructure%2Btemplate%2Balexandrescu%26hl%3Den%26lr%3D%26ie%3DUTF-8%26safe%3Doff%26selm%3D9cf3nf%2524dgha6%25241%2540ID-14036.news.dfncis.de%26rnum%3D5#4385ca0ea5dba977
大致的意思是如果你这样特化一个类,你必然需要重新去写它的成员函数而不能像函数特化那样只重写涉及到的部分。
请问类模板特化有关问题
请教类模板特化问题在c++moderndesign中有句话:你无法特化类的结构。单单使用templates,你无法特化 class的
