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

pro*_*ake 4 c++ c++11

如果我有代码:

struct Parent
{
    virtual void fn();
};

struct Child : public Parent
{
    virtual void fn() override final
    {
        Parent::fn();
    }
};
Run Code Online (Sandbox Code Playgroud)

有没有办法让Parent::fnfinal通过,只有当访问Child而无需重新实现fn,从而使其他一些class可以覆盖fn从派生的时候Parent而不是从派生时Child

喜欢:

struct Child : public Parent
{
    virtual void fn() override final = Parent::fn;
};
Run Code Online (Sandbox Code Playgroud)

还是其他一些语法?

Jon*_*ely 10

不,如果不重新实现,你就无法做到.所以重新实现它:

struct Child : public Parent
{
    virtual void fn() override final { Parent::fn(); }
};
Run Code Online (Sandbox Code Playgroud)

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

    void fn() final { Parent::fn(); }
Run Code Online (Sandbox Code Playgroud)

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