看板 OOAD 關於我們 聯絡資訊
我好像想出解法了 利用inner class來辦到 不過還沒有測試驗證 //原本的大class class BigClass { private: StateInterface::Inner _data; StateInterface* _state; public: //設定狀態 inline void SetState(StateInterface* state) { _state = state; _state->_inner = &_data; } //會變化功能的函數 inline void DoSomething() { _state->DoSomething(); } } //state 的共通介面 class StateInterface { protected: friend BigClass //原本的Data放這邊 class Inner { public: ... } Inner* _inner; public: //做事情的純虛擬函數 virtual void DoSomething()=0; } //其他繼承state的類別模式 class StateInitial : public StateInterface { public: //實做 virtual void DoSomething(); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.210.62 ※ 編輯: iamstudent 來自: 140.113.210.62 (04/23 20:19) ※ 編輯: iamstudent 來自: 140.113.210.62 (04/23 20:25) ※ 編輯: iamstudent 來自: 140.113.210.62 (04/23 20:31)