Empty override C ++ 11

The presence of the Observer template.

class Observer
{
   virtual eventA()=0;
   virtual eventB()=0;
    ...
   virtual eventZ()=0;
}

The Observer class cannot be changed, but my class is only interested in event B. Therefore, I need:

class MyObserver{
    eventA() override {}
    eventB() override { /* Do something */ }
    eventC() override {}
    ...
    eventZ() override {}
}

Overhead for empty - implement all events, especially if you have a policy that is always implemented in cpp files (with the exception of templates).

Does C ++ 11 offer any keyword? how

...
eventC() override = empty;
...

This way, I will not need to add an empty implementation to the CPP file.

+4
source share
2 answers

What you are looking for does not exist.

Anyway, you can do this:

struct Observer {
    virtual ~Observer() = 0;
    virtual void eventA() {}
    virtual void eventB() {}
    // ...
    virtual void eventZ() {}
};

Observer::~Observer() { }

struct MyObserver: Observer {
    void eventB() override { /* Do something */ }
};

Here you have:

  • Observer still abstract (thanks to its destructor), so you cannot create objects of this type

  • ,

, :

int main() {
    // This compiles and works as expected
    Observer *O = new MyObserver;
    // The following line doesn't compile
    // Observer *O = new Observer;
}

, , :

Observer

, , :

struct IntermediateObserver: Observer {
    virtual ~IntermediateObserver() = 0;
    void eventA() override {}
    void eventB() override {}
    // ...
    void eventZ() override {}
};

IntermediateObserver::~IntermediateObserver() { }

struct MyObserver: IntermediateObserver {
    void eventB() override { /* Do something */ }
};

IntermediateObserver .

+4

" " , , , / . , Observer, ?

, {}, empty, default delete.

++ 11 - ?

+1

All Articles