我有一个抽象基类,它声明了一个纯虚函数(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,则将是编译时错误。

您还可以像动态多态一样持有指向父级的指针,因为父级将调用子级函数

09-30 18:07