2016-03-29 68 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風格的連接。所有應用程序需要做的就是將可觀察對象的事件與觀察者對象的事件處理程序連接起來。

相關問題