[問題] 非兄弟物件之間要怎麼溝通?
我的開發平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
有個問題困擾我很久,不知道該怎麼寫才好
故來請教比較好的寫法是什麼
在開始問問題之前想要說明的是
下面我會用到阿公、父親、兒子的說法其實不是很準確
只是單純我自己用來說明什麼class 包含 什麼 class的用詞
如果造成混淆請見諒。
例如 class Father裡面有一個class Child 的 property
而 class GramPa 裡面有一個 class Father 的 property
以下自行理解的解決方法是素人方法
太菜還請見諒
如果兩個Child物件要溝通沒有問題
把一方的signal和slot給connect()起來就好
這也是最基礎的寫法。
只要知道兩個Child的pointer就好。
如果是祖孫溝通
對於 Father 來說
就必須要有 GramPa 和 Child的pointer才能進行connect
對 Father 來說,Child 是自己製造或是本來自己的 property所以沒問題
GramPa 的話
1.除非本來就有寫一個 getParent()來認親,要不然
2.只能一開始在生成 Father的時候在建構子裡面塞 GramPa 的pointer
3.或者是如果 GramPa 偉大到整個program只會有一個 GramPa 的話
也可以用 singleton來取得 GramPa 的pointer
但如果祖孫的距離不只一層呢?
如果是上述的方法1或方法2
會變成每一層都多一個parent pointer 的 field
每一層的建構子都要都要多塞一個parent的pointer,在new 的時候也要把this丟進去
然後每一層的slot都只幹一件事情,就是emit signal給上層
這樣一來寫了一堆很重複很累贅的程式碼只為了傳遞一個訊號
取名也很頭痛,通常會取很相近的名字,
如果這之中有bug出現,還要定睛去看到底是哪一層傳錯,很累。
似乎只能用上述的方法3 singleton,也就變成必須要include GramPa.h
程式多多少少搞得臃腫,如果GramPa.h有改的話還拖累編譯的速度
我不知道我問的是否清楚(因為我要上班了,有點慌亂在亂打文章)
我的程式有很多那種某個小功能按鈕按下去之後要叫很外面的UI做動作的地方
想知道該怎麼做比較好
感謝閱讀
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.225.144 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1657615540.A.4D6.html
推
07/12 18:57,
2年前
, 1F
07/12 18:57, 1F
推
07/12 18:59,
2年前
, 2F
07/12 18:59, 2F
推
07/12 20:31,
2年前
, 3F
07/12 20:31, 3F
→
07/12 20:31,
2年前
, 4F
07/12 20:31, 4F
→
07/12 20:32,
2年前
, 5F
07/12 20:32, 5F
→
07/12 20:49,
2年前
, 6F
07/12 20:49, 6F
推
07/12 21:57,
2年前
, 7F
07/12 21:57, 7F
→
07/12 21:57,
2年前
, 8F
07/12 21:57, 8F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章