なぜあなたはしたいですか?
Calculator<std::string> a;
std::cout << a.add("Hello", " world") << std::endl;
このコードは「Helloworld」を出力します。これは最適ではありませんが(メンバー関数std::string
のパラメーターはadd
値によって取得されます)、機能するために特殊化は必要ありません。
編集OK、特殊化が必要ですが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 ;
}
2番目のソリューションでは、単一のインスタンスで、、または必要なものCalculator
を追加できます(これは、クラス自体ではなく、テンプレートである関数であるため)。int
std::string
add
Calculator