看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) No 問題(Question): 最近看到一種class的用法 不過查了網路資料發現根本很少人這樣用 想請教板上這種用法到底目的在於? Class A { class B *b; }; 這種奇怪的宣告方式等同於 B *b 嗎? 還是另有所指? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.75.3.222 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1494225668.A.1C0.html ※ 編輯: coal511464 (211.75.3.222), 05/08/2017 14:41:30 ※ 編輯: coal511464 (211.75.3.222), 05/08/2017 14:42:21 ※ 編輯: coal511464 (211.75.3.222), 05/08/2017 14:42:49
loveflames: A可以不知道B的實作 05/08 15:01
steve1012: 沒有很少吧 有時候你不知道是怎樣的class 要被用 05/08 15:21
steve1012: 如果你要B b;的話 編譯器必須知道b的大小才能給記憶體 05/08 15:22
steve1012: 所以一定要知道implementation. Pointer 只需要alloca 05/08 15:22
steve1012: te pointer size 05/08 15:22
steve1012: 看錯問題 答案是對 可以查elaborate type specifier. 05/08 15:27
steve1012: 沒啥好處 05/08 15:27
steve1012: 我剛以為你要問pointer vs object 05/08 15:27
coal511464: 謝謝樓上 你點出了關鍵字 05/08 15:35
hunandy14: Handle Class 05/08 19:22
hunandy14: 前面大大堤的~不過好像不是你要的 05/08 19:26
s4300026: 巢狀class? 05/09 06:48
steve1012: 不是巢狀class 05/09 09:51
Killercat: 有一種用法是,A是B的Proxy,而B是template variable 05/09 22:03
Killercat: 不過這寫法沒那麼單純 要有overload一些operator 05/09 22:03
EdisonX: 殺人貓的範例 => std::bitset<N> 05/10 01:04
Killercat: er..應該是std::shared_ptr吧 XD 05/10 13:49
LPH66: 我以為你在說 CRTP... 05/10 19:45
Killercat: CRTP也是一種沒錯, 不過在這裡講這個太玄了 XD 05/10 21:54