Re: [問題] include

看板C_and_CPP作者 (我愛阿蓉)時間15年前 (2010/06/19 01:30), 編輯推噓1(106)
留言7則, 3人參與, 最新討論串3/6 (看更多)
//a.h #ifndef A_H #define A_H class B; class A { public: A(); void print(){} private: B* _b; }; #endif //b.h #ifndef B_H #define B_H class A; class B { public: B(){} B(A* ptr); private: A* _a; } ; #endif //a.cpp #include "a.h" #include "b.h" A::A(){_b = new B(this);} //b.cpp #include "a.h" #include "b.h" B::B(A* ptr){ _a = ptr; _a->print(); } 主要就是不要讓他該看到class 宣告時 你卻讓他看不到 你一開始把function定義寫再a.h 用到了type B 卻只給他看class B;這名字 沒看到內容 所以才不過 上面這樣改是OK....但總覺得不是個好的設計耶 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.86.31

06/19 01:32, , 1F
XD 真的是很爛的設計
06/19 01:32, 1F

06/19 01:33, , 2F
但是已經寫成這樣了就懶得重新改寫架構
06/19 01:33, 2F

06/19 01:37, , 3F
主要是怕AB之間牽扯太深 改B,A行為可能會發生問題 搞的半死
06/19 01:37, 3F

06/19 06:29, , 4F
這種狀況在使用 visitor pattern 的時候還不算少見,
06/19 06:29, 4F

06/19 06:29, , 5F
最大的缺點就是你改一邊的 class 定義幾乎就是整個重編。
06/19 06:29, 5F

06/19 06:35, , 6F
解決這種編譯期相依性的方法往往都會吃到執行期的 CPU。
06/19 06:35, 6F

06/19 06:36, , 7F
所以最好從程式架構的設計上著手。
06/19 06:36, 7F
文章代碼(AID): #1C6wqyfx (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1C6wqyfx (C_and_CPP)