我有一个抽象基类,它声明了一个纯虚函数(virtual method() = 0;
)。一些继承的类专门化并使用此方法,但是在那些继承的类中,有一个我不想使该方法可用。我该怎么做?将它设为私有(private)是唯一的选择吗?
最佳答案
好吧,您可以扔掉它,这将使在所谓的地方容易做事。
void method() override { throw /* whatever */ ; }
动态多态是运行时属性。因此,运行时错误。如果您需要在编译时触发的内容,则需要静态多态性。
template<typename Child>
struct Parent {
void callMe() {
static_cast<Child*>(this)->callMeImpl();
}
};
struct SomeChild : Parent<SomeChild> {
};
现在,如果您尝试通过
callMe
扩展的父级调用SomeChild
,则将是编译时错误。您还可以像动态多态一样持有指向父级的指针,因为父级将调用子级函数