有没有办法在不重新实现的情况下从子类中标记父级的虚拟函数 final。

Is there a way to mark a parent's virtual function final from a child class without reimplementing it

本文关键字:子类 final 函数 虚拟 情况下 新实现 有没有 实现      更新时间:2023-10-16

如果我有代码:

struct Parent
{
virtual void fn();
};
struct Child : public Parent
{
virtual void fn() override final
{
Parent::fn();
}
};

有没有办法让Parent::fn仅在通过Child访问时才final而不重新实现fn,以便其他一些class可以在从Parent派生时覆盖fn,但在从Child派生时不能覆盖?

喜欢:

struct Child : public Parent
{
virtual void fn() override final = Parent::fn;
};

还是其他语法?

不,如果不重新实现它,你就无法做到这一点。所以只需重新实现它:

struct Child : public Parent
{
virtual void fn() override final { Parent::fn(); }
};

注意:说virtual ... override final是完全多余的,final是非虚函数的错误,所以你应该说:

void fn() final { Parent::fn(); }

请参阅 http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override