你为什么想要?
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
类本身)。