Re: [問題] 非兄弟物件之間要怎麼溝通?
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章