不同类的对象之间的事件处理

时间:2016-03-29 09:28:39

标签: c++ oop event-handling can-bus

我有一个C ++类A,它从微控制器上的CAN接口捕获帧。我正在尝试实现另一个类B(和C和D ..),它使用A类捕获的帧,一个接一个。实质上,A类根据帧的内容将捕获的帧重定向到来自上层的一个类。我是否应该实现某种事件处理机制(我不熟悉编程新手),这样每次收到一个帧时,都会从上层向该类的对象触发一个事件?或者我可以通过继承A类中的B,C,......来实现这一点,等等。有人可以帮助我在这里开发一个好的和简单的逻辑吗?

编辑:一个不太好的方法是我在A类中有一个switch语句,然后根据一个案例值调用B,C,D,......之一的所谓的处理方法。然而,这不是一个聪明的方法,因为现在A级使用我不想要的B,C,D ......等等。 A类不应该知道B,C,D,......

2 个答案:

答案 0 :(得分:0)

例如:类A包含std::list<B*>,其中B是具有一些virtual处理程序方法的基类。几个类(C,D,E)继承了B类并重载了这个方法。然后,您只需将派生类的实例添加到A中的指针列表(例如:std::list<B*> workers {new C, new D, new E};),并为每个实例调用重载方法。如果每个类接受当前帧并以自己的方式处理它,则每个类自行决定。

答案 1 :(得分:0)

您可以查看Observer design pattern。基本上,您可以拥有一个可观察的类(在您的情况下为class A)和多个观察者(在您的情况下为class B class C等)。观察员将在可观察的类中注册事件通知。我有一个示例代码EventInterface Model,它允许对象之间的Qt样式连接。所有应用程序需要做的是将可观察对象的事件与观察者对象的事件处理程序连接起来。