Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类的模板专门化_C++_Templates_C++11 - Fatal编程技术网

C++ 类的模板专门化

C++ 类的模板专门化,c++,templates,c++11,C++,Templates,C++11,我正在尝试实现模板专门化。我需要一个模板和类: 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>
class Person{

public:

        Person(char one, T two){

            this -> prv  = one;
            this -> druh = two;

        }
        void explain();

private:

    char prv;
    T druh;

};
并重新定义了解释方法

void Person<char>::explain(){

    cout << "Druh is a char " << endl;

}
void Person::explain(){

cout实现您想要做的事情的一个简单方法是:

模板
甲级{
公众:
A():c('z'){
}
void printChar(){

std::cout实现您想要做的事情的一个简单方法是:

模板
甲级{
公众:
A():c('z'){
}
void printChar(){

std::cout您可以只指定以下方法:

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

cout您可以只指定以下方法:

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

cout class
Person
不包含名为
prv
的成员它是否应该从class Person的第一次声明中获取私有变量?
否。您认为它为什么应该这样做?那么使用模板专门化有什么意义?为什么不定义另一个类呢?模板专门化不是inheritance@user3706129:当您专门化一个类模板时,您正在创建另一个类。专门化的原因是使调用方仍然可以是泛型的。例如,调用方可能正在使用
Person
。专门化允许他们不必检查
T
是否是
char
,就可以知道要使用哪个类。class
Person
不包含名为
prv
的成员。它是否应该从类Person的第一次声明中获取私有变量?
否。您认为它为什么应该这样做?使用模板专门化有什么意义?为什么不定义另一个类。模板专门化不是inheritance@user3706129:当你cialize一个类模板,您正在创建另一个类。您专门化的原因是使调用方仍然可以是泛型的。例如,调用方可能正在使用
Person
。专门化允许他们不必检查
T
是否是
char
,就可以知道要使用哪个类。
void Person<char>::explain(){

    cout << "Druh is a char " << endl;

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