3
請參閱以下代碼。第一個MyClass有兩個函數(func1和func2)。然後我想在func1中爲MyClass做一些特殊的事情,但不是func2。看起來我必須再次輸入func2的代碼。我想知道是否有辦法解決這個問題?謝謝模板專業化:我們可以部分實施特殊案例
#include <iostream>
using namespace std;
template <class T>
class MyClass {
public:
void func1(){
cout<<"default: func1"<<endl;
}
void func2(){
cout<<"default: func2"<<endl;
}
private:
T haha;
};
template <>
class MyClass<double> {
public:
void func1(){
cout<<"special: func1"<<endl;
}
};
int main()
{
MyClass<int> intclass;
intclass.func1();
intclass.func2();
MyClass<double> doubleclass;
doubleclass.func1();
doubleclass.func2(); // error 'class MyClass<double>' has no member named 'func2'
return 0;
}
謝謝。它適用於這個例子。但在我的工作情況中,模板部分將用於首先構建一個靜態庫,然後編譯器會投訴重複的定義。還有什麼評論? –
@YanZhu使'inline'專業化。 – mfontanini
謝謝。它通過鏈接。這背後的理論是什麼?你能爲此點點文章嗎?我試過谷歌,但找不到任何有用的東西。 –