2016-03-29 36 views
0

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

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

+0

我可能会为每个处理器定义一个通用接口(基类),它将声明一个“工作/进程”函数。我会把它们全部存放在一个容器中。我将有一个“控制器”类,它将使用类A获取框架并将其传递给每个列表控制器。现在,您如何生成控制器列表取决于您,这取决于订单是否重要等... –

+0

我做了一个编辑。你能再看一次吗? – Paindoo

+0

我明白了,你的意思是只有一个B,C或D类可以处理这个帧。你知道哪一个字段值。这是工厂设计模式的一种非常常见的用法,请在谷歌上查看它。如果你不知道哪一个,那么你可以使用不太常见的责任链模式,但是如果你愿意的话,我可以写一些伪代码。 –

回答

0

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

0

您可以查看Observer design pattern。基本上,你可以有一个可观察的类(在你的情况下为class A)和多个观察者(在你的情况下为class Bclass C等)。观察员将向可观察班级报名参加事件通知。我有一个示例代码EventInterface Model,允许对象之间的Qt风格的连接。所有应用程序需要做的就是将可观察对象的事件与观察者对象的事件处理程序连接起来。

相关问题