2016-03-04 137 views
0

我想实现模板专业化。我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<>对编译器说,我不使用模板规范创建另一个对象?

+0

类'人'不包含一个叫做'prv'成员。 – Nard

+0

'应该从班级人员的第一次申报中获得私人变量吗?不是。你为什么认为应该这样做? – cpplearner

+0

然后使用模板专门化的要点是什么?为什么不只是定义另一个班级。 – user3706129

回答

1

您可以专注只方法:

template <> 
void Person<char>::explain(){ 
    cout << "Druh is char" << endl; 
} 
3

实现你想要做什么的更简单的方法是这样的:

​​

既然你想要的是专门的成员函数,而不是整个类。