我想爲模板類中的成員函數有幾個不同的函數定義。事情是這樣的:專用模板成員函數?
template <typename T>
class MyClass
{
void Foo();
T val;
//other functionality and data
};
//handles all types
template <typename T>
void MyClass<T>::Foo()
{
return val;
}
//handles a special type in a different way
template <>
void MyClass<float>::Foo()
{
return val + 5.0f;
}
我試圖實現與上述這一點,並得到一個鏈接錯誤爲每個特殊類型的我嘗試顯式實例。鏈接器錯誤提到該函數已經被定義過。也許我在錯誤的地方看,但我找不到任何資源來幫助我找出這個問題:(
問:這是可能的嗎?如果是這樣,你如何做到這一點,爲什麼它的工作?
謝謝!
我剛剛粘貼您的定義在頭文件中,這是我從兩個不同的源文件包括在內;在兩個源文件中,我爲專門和非專用模板類的實例都調用了Foo()方法。一切正常,用g ++ - 4.4.3。你能否提供一些關於鏈接器錯誤和項目結構的更多細節? – misberner
這應該工作;你的問題必須在別處。確保您熟悉常規模板機制以及標題和鏈接問題。 –
[適用於我](https://ideone.com/IpHd0)。 –