C++ c++;在使用侦听器时,什么样的设计有助于避免多重继承
我有一个较大的项目,其中许多较小的类侦听一些数据,并在某些情况下通知其他类。所以我有这样的课程C++ c++;在使用侦听器时,什么样的设计有助于避免多重继承,c++,C++,我有一个较大的项目,其中许多较小的类侦听一些数据,并在某些情况下通知其他类。所以我有这样的课程 class Calc {} class Spotter {} class Updater {} .... 还有一些听他们的课 class Listener_1 {} class Listener_2 {} 这个项目最终有很多接口 class ICalcListener { virtual void onCalcCall( ... ) {} class ISpotterListen
class Calc {}
class Spotter {}
class Updater {}
....
还有一些听他们的课
class Listener_1 {}
class Listener_2 {}
这个项目最终有很多接口
class ICalcListener {
virtual void onCalcCall( ... ) {}
class ISpotterListener {
virtual void on SpotterCall( ... ) {}
....
侦听器并没有继承所有侦听器,并在需要响应的地方覆盖回调
class Listener_1 : public ICalcListener, public ISpotterListener, ... {
virtual void onCalcCall( ... ) { doThis(); }
}
设计正在发挥作用,但我想知道是否有更好的方法来处理这个问题,而不是在这里最大限度地与自己进行交互和继承。我只需要注册一个回调
编辑:
我一直在摸索,似乎使用接口的替代方法是使用(我使用的是c11)
1.)代表
2.)std::函数
3.)lambda函数
如果性能很重要,但简单性也很重要,那么最好的方法是什么呢?从几个抽象类中只使用方法进行多重继承并没有那么糟糕,而且很有效。我同意它会产生大量“垃圾”代码来支持所有类型的通知 基本上,为每个事件使用
ixxnotify
抽象类更符合Java风格
我不知道你的项目是什么以及它是如何运作的,但你可以尝试寻找以下替代方案:
INotify
抽象类,但要使其更通用,这样它们只有一个参数,如Event
,它将携带所有必需的信息,包括事件类型。这将减少接口类的数量,但会给事件类型的switch
语句带来额外的麻烦。这种方法稍微打破了代码的“OOP性”event
参数和对象,可以订阅它们。看一看访客或观察者模式,并以更一般的方式思考它们std::function
作为“事件处理程序”。这里的缺点是,您只能为任何给定事件分配一个处理程序。您可以通过在std::function
的顶部添加一个层来克服这一问题多接口继承并没有那么糟糕。数据继承带来了很多问题。谢谢,这是一个很好的概述。图书馆不是一个选择,因为我不能使用它们,但其他的看起来很有趣。这似乎是一个很好的参考,供任何人阅读模式和设计。