我有具有虚拟功能的基类:重新实现从基类的虚拟功能在派生模板
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