如果我有代码:
struct Parent
{
virtual void fn();
};
struct Child : public Parent
{
virtual void fn() override final
{
Parent::fn();
}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法让Parent::fn被final通过,只有当访问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