[問題] Class變數宣告有 class型態的變數

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

Links booklink

Contact Us: admin [ a t ] ucptt.com