Я пытаюсь реализовать специализацию шаблона. Я 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;
}
Теперь, если я создать объект с типом данных, кроме гольца, он будет indeeed выведите «друх Isnt обугливается», например
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;
}
Но я получаю эту ошибку
«класс Person» не имеет ни одного члена с именем «частная» |
Почему это происходит? Должны ли они принимать частные переменные от первого объявления класса Person? Doesnt templat<>
говорит компилятору, что я не создаю другой объект только с использованием спецификации шаблона?
класс '' Человек не содержит элемент с именем 'prv'. –
Nard
'Должен ли он принимать частные переменные от первого объявления класса Person?' Нет. Почему вы думаете, что он должен это делать? – cpplearner
В чем смысл использования специализации шаблонов? Почему бы просто не определить другой класс. – user3706129