你爲什麼要?
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
類本身)。
@silico,@icecrime,通過使用STL,我可以做到這一點;但我想用模板專業化 – 2010-11-22 10:36:57
@Sujay Ghosh:爲什麼需要模板專業化?使用'std :: string'遠不如創建'Calculator'的新專門化。 –
2010-11-22 10:38:23
我認爲第二個解決方案是一個更好的設計。如果有一天我想添加一個自定義類,而不是任何PODS,這將解決我的問題。 – 2010-11-26 07:00:12