→ tinlans:姑且不論狀態機該不該這樣寫,你需要的工具是 pointer。 06/22 21:50
*刪除與問題無關的敘述...
請問t大所說的pointer是指將變數宣告為pointer?
這樣要讓pointer指向哪個位置呢?
※ 編輯: newdominic 來自: 118.167.204.43 (06/22 22:21)
※ 編輯: newdominic 來自: 118.167.204.43 (06/22 22:30)
推 goodGG:Effective C++. 確定你的public繼承塑造出is-a關係 06/22 22:39
推 goodGG:如果那些members與class State沒啥關, 根本就不要寫進去 06/22 22:42
推 loveflames:在子類別用reference?像是 int &childVar=intVar; 06/22 22:48
如果在子類別用reference,這樣參考到的會是同一個intVar嗎?
感覺應該是不同instance裡面的intVar?
→ yoco315:請教一下在這邊用 static 有什麼問題嗎? 06/22 22:52
沒有問題,只是好奇其他解法XD"
推 QQ29:請問t大說的用pointer 有什麼好的寫法嗎??? 06/22 22:53
→ QQ29:或是比較正統的寫法 06/22 22:53
※ 編輯: newdominic 來自: 118.167.204.43 (06/22 23:18)
→ tinlans:其實就是讓 concrete state 的 data member 指向 base 的 06/22 23:16
→ tinlans:data member,當然也能用 reference。 06/22 23:16
→ tinlans:當然更 OO 一點的方法是你先封裝 base 的 data members, 06/22 23:17
→ tinlans:提供 protected 的 getter/setter 就行了。 06/22 23:17
→ tinlans:但是更根本的問題就真的說來話長了。 06/22 23:18
→ tinlans:要分成狀態內部是否真的需要帶 instance variable, 06/22 23:19
→ tinlans:還有每個 state 是否只有一個實體 (會影響 thread-safety) 06/22 23:20
→ tinlans:來討論;光這兩大類就有 2 x 2 = 4 種細項要講。 06/22 23:20
→ tinlans:我比較好奇的是 intVar 和 floatVar 是不是應該屬於 06/22 23:24
→ tinlans:context class 的成員?如果是的話把它提到 context 去, 06/22 23:24
→ tinlans:A() 和 B() 都改成接收 Context * 就可以了。 06/22 23:24
→ tinlans:基本上,不管是你用了 static 還是 singleton,就表示它是 06/22 23:28
→ tinlans:可共用的 state,state 物件內部就不能有 data member。 06/22 23:28
→ tinlans:不然就算是 single thread 程式,你造一堆 context 物件 06/22 23:28
→ tinlans:去轉來轉去,你的資料就亂了。 06/22 23:29
→ tinlans:所以在你進一步描述那兩個 data member 是幹嘛的之前, 06/22 23:30
→ tinlans:我也只能這樣大方向的回你。 06/22 23:30
推 QQ29:光t大說的大方向 我就很難懂了....context class是什麼意思阿 06/22 23:44
→ newdominic:感謝各位的回覆 我另外發了篇較詳細的 還請不吝賜教 06/23 01:45