小编Jas*_*ott的帖子

C++ 11避免了"Call Super"代码的味道

我正在寻找避免"召唤超级"代码气味的方法.当重新实现该函数时,需要子类来调用超类的虚函数版本时,会出现此代码异味.

class Base
{
    public:
        virtual void foo(){ ... }
}
class Derived : public Base
{
    public:
        virtual void foo(){ Base::foo();// required! ... }
}
Run Code Online (Sandbox Code Playgroud)

如果继承只有一层深,我可以使用模板方法

class Base
{
    public:
        void foo(){ ... ; foo_impl(); }
    protected:
        virtual void foo_impl(){}
}
class Derived : public Base
{
    protected:
        virtual void foo_impl(){ ... }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我需要继承Derived,我会回到我开始的地方.

我正在考虑注册方法.

class Base
{
    public:
        Base()
        {
            _registerCallback( [this](){ _baseFoo(); } );
        }
        void foo()
        {
            for( auto f : _callbacks )
                f();
        } …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11

2
推荐指数
1
解决办法
397
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1