Зачем вам это нужно?
Calculator<std::string> a;
std::cout << a.add("Hello", " world") << std::endl;
Этот код выводит "Hello world".Это не оптимально (параметры std::string
в функции-члене add
принимаются по значению), но для работы не требуется специализация.
РЕДАКТИРОВАТЬ ОК, вам нужна специализация,но вы не можете просто специализировать функцию-член add
, потому что функция не является самим шаблоном.Вы можете либо специализировать весь класс:
template<>
class Calculator<std::string>
{
public :
Calculator() {}
~Calculator() {}
std::string add(const std::string &a, const std::string &b)
{
// Do std::string specific stuff
return a + b ;
}
};
Или создать шаблон функции-члена add
и специализировать его:
class Calculator
{
public :
Calculator () {}
~Calculator () {}
template<class T>
T add(T a, T b)
{
return a + b;
}
};
template<>
std::string Calculator::add<std::string>(std::string a, std::string b)
{
// Do std::string specific stuff
return a + b ;
}
Со вторым решением, один экземпляр Calculator
затем можно будет добавить int
, std::string
или все, что вам нужно (так как это функция add
, которая является шаблоном, а не сам класс Calculator
).