我有具有虛擬功能的基類:重新實現從基類的虛擬功能在派生模板
class Base {
...
virtual void myFunction() { assert(0 && "not implemented yet"); }
}
和派生(模板)類基地:
DerviedClass.hpp :
Template<typename T>
class DerivedClass : public Base, public T {
...
void myFunction();
}
DerivedClass.cpp:
template <>
void DerivedClass<ClassA>::myFunction() {
//Something ClassA is suppose to do
}
編譯。但是,當我嘗試實例化一個DerivedClass<ClassB>
我得到的錯誤:
IProject.o:-1: erreur : undefined reference to `DerivedClass<ClassB>::myFunction()'
爲什麼我有這樣的錯誤?爲什麼它不需要Base::myFunction
而不是強迫我在DerivedClass
或專用功能DerivedClass::myFunction
中實現通用myFunction
?
注:在myFunction的斷言是因爲ClassB
不應該在runtime
調用myFunction
。例如,如果myFunction
是getRadius
,DerivedClass<Circle>::getRadius()
是好的,但不應該調用DerivedClass<Square>::getRadius()
。
注2:其他主題,我發現並不清楚這點
您可能想要重新考慮您的設計以禁止DerivedClass :: getRadius()。 –
Jarod42
'DerivedClass :: getRadius()'不應該在第一個地方存在。 –
我做了這個設計,當我想從基類調用一個函數時,無需'dynamic_cast'就可以將所有的DerivedClass操作爲Base。 (有很多派生類有很多需要調用的函數) – ElevenJune