空覆盖 C++11
Empty override C++11
拥有观察者模式。
class Observer
{
virtual eventA()=0;
virtual eventB()=0;
...
virtual eventZ()=0;
}
Observer class 无法更改,但我的 class 只对事件 B 感兴趣。因此我需要:
class MyObserver{
eventA() override {}
eventB() override { /* Do something */ }
eventC() override {}
...
eventZ() override {}
}
空实现所有事件会产生开销,特别是如果您有始终在 cpp 文件中实现的策略(显然模板除外)。
C++11 是否为此提供任何关键字?喜欢
...
eventC() override = empty;
...
这样一来,我就不需要在 CPP 文件中添加空的实现了。
您的设计违反了 Interface segregation principle,声明不应强迫客户端依赖它不依赖的方法 use/need。
也许您应该重新考虑设计并创建多个观察者基地 类,每个事件一个?
如果无法更改设计,请使用{}
,用户编写的函数没有empty
、default
或delete
。
Does C++11 offer any keyword for that?
没有
您要查找的内容不存在。
无论如何,你可以这样做:
struct Observer {
virtual ~Observer() = 0;
virtual void eventA() {}
virtual void eventB() {}
// ...
virtual void eventZ() {}
};
Observer::~Observer() { }
struct MyObserver: Observer {
void eventB() override { /* Do something */ }
};
这里有:
Observer
仍然是抽象的(感谢它的析构函数),所以你不能实例化这种类型的对象
所有方法的默认空实现
不需要在派生的 classes 中为那些您不感兴趣的方法定义空体
因此,结果是:
int main() {
// This compiles and works as expected
Observer *O = new MyObserver;
// The following line doesn't compile
// Observer *O = new Observer;
}
好的,但你说的是:
The Observer class cannot be changed
在这种情况下,您可以定义一个不可实例化的中间体 class,例如:
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
派生所有自定义观察者,仅此而已。
拥有观察者模式。
class Observer
{
virtual eventA()=0;
virtual eventB()=0;
...
virtual eventZ()=0;
}
Observer class 无法更改,但我的 class 只对事件 B 感兴趣。因此我需要:
class MyObserver{
eventA() override {}
eventB() override { /* Do something */ }
eventC() override {}
...
eventZ() override {}
}
空实现所有事件会产生开销,特别是如果您有始终在 cpp 文件中实现的策略(显然模板除外)。
C++11 是否为此提供任何关键字?喜欢
...
eventC() override = empty;
...
这样一来,我就不需要在 CPP 文件中添加空的实现了。
您的设计违反了 Interface segregation principle,声明不应强迫客户端依赖它不依赖的方法 use/need。 也许您应该重新考虑设计并创建多个观察者基地 类,每个事件一个?
如果无法更改设计,请使用{}
,用户编写的函数没有empty
、default
或delete
。
Does C++11 offer any keyword for that?
没有
您要查找的内容不存在。
无论如何,你可以这样做:
struct Observer {
virtual ~Observer() = 0;
virtual void eventA() {}
virtual void eventB() {}
// ...
virtual void eventZ() {}
};
Observer::~Observer() { }
struct MyObserver: Observer {
void eventB() override { /* Do something */ }
};
这里有:
Observer
仍然是抽象的(感谢它的析构函数),所以你不能实例化这种类型的对象所有方法的默认空实现
不需要在派生的 classes 中为那些您不感兴趣的方法定义空体
因此,结果是:
int main() {
// This compiles and works as expected
Observer *O = new MyObserver;
// The following line doesn't compile
// Observer *O = new Observer;
}
好的,但你说的是:
The Observer class cannot be changed
在这种情况下,您可以定义一个不可实例化的中间体 class,例如:
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
派生所有自定义观察者,仅此而已。