我剛剛花了大約20分鐘的時間試圖弄清楚爲什麼我的一些模板方法通過編譯而不是鏈接。關於C++模板和顯式聲明
原來我需要顯式聲明我的模板方法。
正是這種東西:
class Test {
template<class Source> void Save(Source& obj);
};
然後我會用它像這樣的地方:
Test t;
ClassDerivedFromInterface obj;
t.Save(obj);
它編譯罰款,但沒有鏈接。直到我補充說:
template void Test::Save(ClassDerivedFromInterface);
我想明白在這種情況下,顯式聲明是必要的。
感謝
請提供真實的代碼。 –
是't.Save(obj);'和'template void Test :: Save(ClassDerivedFromInterface);'在同一個文件中? –