Re: [問題] 非兄弟物件之間要怎麼溝通?

看板C_and_CPP (C/C++)作者 (hc)時間1年前 (2022/07/12 22:48), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《liu2007 (薯)》之銘言: : 會變成每一層都多一個parent pointer 的 field : 每一層的建構子都要都要多塞一個parent的pointer,在new 的時候也要把this丟進去 : 然後每一層的slot都只幹一件事情,就是emit signal給上層 : 這樣一來寫了一堆很重複很累贅的程式碼只為了傳遞一個訊號 : 取名也很頭痛,通常會取很相近的名字, : 如果這之中有bug出現,還要定睛去看到底是哪一層傳錯,很累。 : 似乎只能用上述的方法3 singleton,也就變成必須要include GramPa.h : 程式多多少少搞得臃腫,如果GramPa.h有改的話還拖累編譯的速度 : 我不知道我問的是否清楚(因為我要上班了,有點慌亂在亂打文章) : 我的程式有很多那種某個小功能按鈕按下去之後要叫很外面的UI做動作的地方 : 想知道該怎麼做比較好 : 感謝閱讀 其實跟阿公、老爸、兒子無關,因為這個問題其實是把繼承與介面搞錯 當然我不知道你實際上的程式碼長怎麼樣,舉例來說 QA <- QB <- QC 這樣的類型設計好了 你應該要思考的是 B 有沒有必要包含 A,C 有沒有必要包含 B 如果你需要的是共通介面,那應該是讓 QA QB QC 去虛擬繼承一個 interface (pure abstract class) ,我們就叫 QI 好了 以UI的設計角度來說,我會認為除了 Model 或 View 以外,基於Qt框架以上又延展到 三四層的繼承關係是很奇怪的。 再來是 connecting 的問題,根據你的描述我認為你應該是透過 constructor 傳遞指 標來進行 connecting。如果你按照我上述所講的 將繼承改為介面實作 後,這個問 題的解法也就簡單,同樣是使用一個認識 QA 的 class,這個 class 可以是 builder 也可以是 factory,甚至可以透過 template 的方式決定你要建構的物件,最簡單也 可以是 function,在建立的同時就完成 connecting 例如 (智能指標跟constraint我就懶得打了) template<typename T, typename... Args> QI* create(QA& master, Args&&...); 這邊寫 QA 是因為假定你的QA是整個運轉的中樞或橋梁之類的存在...... 其實類似的作法還有很多,比方說你原文提到的 「我的程式有很多那種某個小功能按鈕按下去之後要叫很外面的UI做動作的地方」 這種其實也能看作是 global event 最後我會建議你去了解一下 Qt 整個 MVC 的架構設計,我看過很多人都把 Model 的 邏輯刻在 UI 上...... 實際上 Ot 其本身提供的工具跟基礎類別了解的話能省下很 多時間 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.111.117 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1657637296.A.8DD.html
文章代碼(AID): #1YpOcmZT (C_and_CPP)
文章代碼(AID): #1YpOcmZT (C_and_CPP)