我想实现模板专业化。我delcared模板和类:模板专业化与类
template <class T>
class Person{
public:
Person(char one, T two){
this -> prv = one;
this -> druh = two;
}
void explain();
private:
char prv;
T druh;
};
,并宣布其吸气剂
template <class T>
void Person<T>::explain(){
cout << "Druh isnt char" << endl;
}
现在,如果我创建的对象与不是char其它数据类型,它会indeeed输出“Druh心不是CHAR”如
Person <int> obj('a',5);
obj1.explain(); // "Druh isnt char"
我想使用专业化,所以当第二个参数是字符时它会说"Druh is char"
我尝试了使用:
/*********模板专业化***********/
template<>
class Person<char>{
public:
Person(char one, char two){
this-> prv = one;
this-> druh = two;
}
void explain();
};
和定义解释再次方法
void Person<char>::explain(){
cout << "Druh is a char " << endl;
}
但我得到这个错误
“类人”没有名为“PRV”成员|
这是怎么发生的?是否需要首先声明Person类的私有变量?不是templat<>
对编译器说,我不使用模板规范创建另一个对象?
类'人'不包含一个叫做'prv'成员。 –
Nard
'应该从班级人员的第一次申报中获得私人变量吗?不是。你为什么认为应该这样做? – cpplearner
然后使用模板专门化的要点是什么?为什么不只是定义另一个班级。 – user3706129