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

看板C_and_CPP (C/C++)作者 (薯)時間1年前 (2022/07/12 16:45), 編輯推噓4(404)
留言8則, 4人參與, 1年前最新討論串1/3 (看更多)
我的開發平台是 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, 1年前 , 1F
為何GrandPa需要和Child溝通,讓他們跟某Global溝通如何?
07/12 18:57, 1F

07/12 18:59, 1年前 , 2F
你還有 UI 層, 那樓上的「某Global」可以理解為視窗訊息
07/12 18:59, 2F

07/12 20:31, 1年前 , 3F
可以用MVC嗎? 祖父是V,孫子是M,父親是C。 父親裡面
07/12 20:31, 3F

07/12 20:31, 1年前 , 4F
有祖父和孫子,請老爸當傳聲筒。
07/12 20:31, 4F

07/12 20:32, 1年前 , 5F
然後沒有繼承關係,可以不要用祖父,父親,兒子嗎?
07/12 20:32, 5F

07/12 20:49, 1年前 , 6F
用event丟出來,叫要做事的人hook。
07/12 20:49, 6F

07/12 21:57, 1年前 , 7F
裡面???如果是composite就自己各自掛signal不是很正常嗎
07/12 21:57, 7F

07/12 21:57, 1年前 , 8F
如果是繼承,通常用的人都是用Base/Abstract那層吧
07/12 21:57, 8F
文章代碼(AID): #1YpJIqJM (C_and_CPP)
文章代碼(AID): #1YpJIqJM (C_and_CPP)