это может быть вопрос, что кто-то спросил раньше, но я не могу найти его ...C++ шаблон частичная специализация
У меня есть класс в .hpp
файле:
class A{
public:
A(){//constructor}
~A(){//destructor}
//some public methods and arguments
template<typename Type>
void func(Type t){//do something for numbers}
private:
//some private methods and arguments
}
Метод шаблон должен работать для int, double ... но не для строки. Таким образом, в моем .hpp
файле, я определил, что func
делает для чисел и в моем .cpp
файле я написал:
template<>
void A::func(std::string t){ // do something in that case}
Но когда я использую функцию func
с std::string
, программа вызывает методы для чисел ... Так что я заменить файл .hpp
по:
class A{
public:
A(){//constructor}
~A(){//destructor}
//some public methods and arguments
template<typename Type>
void func(Type t){//do something for numbers}
void func(std::string s);
private:
//some private methods and arguments
}
и мой .cpp
файл стал:
void A::func(std::string t){ // do something in that case}
а потом все работает!
мой вопрос в том, что это правильный способ сделать это?
Я полагаю, что второй большой блок - это hpp, а не cpp? правда ? – Bruce
Да, я отредактировал эту ошибку ... извините – PinkFloyd
Нет pb, я просто не был уверен, поэтому сам не редактировал. – Bruce