看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux clang 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我知道 C++ 沒有 Reflection 但是有沒有可能用類似 SFINAE 之類的技巧達到取得 field names 或是 member list 的 目 要是可行的話類似這樣的設計不是滿漂亮的嗎 class UserTerm : public Frame { public:  UserTerm ()  : Frame () { _M_init (); }  UserTerm (const UserTerm &other) = delete;  UserTerm (UserTerm &&other) = delete;  ………… protected:  Button _M_button_next;  Button _M_button_cancel;  TextBox _M_textbox_desc;  Radio _M_radio_agree;  Radio _M_radio_disagree;  ………… private:  void _M_init ()  { /* 初始化元件 */ } }; virtual void UserTerm::_M_show () const { /* members.show (); */ } 要是能夠取得 member list,那 _M_show 就可以不用開放給用戶端 用戶端只要把想要的元件塞進 class 裡,然後在 _M_init 設個大小位置之類的初值即可 這樣看起來超棒的啊 所見即所得,不知道有沒有什麼方法可以達成 get_fields ()? 我翻了好多資料都沒有找到比較好的作法 所有人給的答案都是 impossible…… 可是我想要的東西在 compile time 就可以確定了啊,應該也不需要什麼 runtime 的技 術? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.15.163.73 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460932320.A.10F.html
ronin728: 所以有人才說C++是半吊子的OOPL嘛www。效率不吃緊的話,04/18 09:16
ronin728: Hash map或平衡樹放Function pointer有搞頭吧04/18 09:16
Frozenmouse: 其實我看不太懂XD 你是要在compile time就取出所有的04/18 10:12
Frozenmouse: members嗎?真有reflection還是得在runtime啊…04/18 10:12
Caesar08: 看不懂問題... 你可以說清楚一點嗎?04/18 10:33
Caesar08: 有點好奇,N3996、N4111、N4451為啥都沒出現在gcc上面04/18 10:45
Caesar08: Static reflection這是你要找的東西嗎?04/18 10:45
static reflection 好像很棒 我先試試看再來回報喔 感謝~ 就是說, _M_show 要負責顯示自己和所有底下的成員(Button, TextBox, Radio...) 如果能夠在編譯時期知道一個 class 有哪些 members,那 _M_show 就可以統一寫好 因為雖然每個繼承自 Frame 的 class 都可以擁有不同的成員,但是因為可以在編譯時期 得知,所以還是可以知道有哪些要 show ※ 編輯: CoNsTaR (101.15.163.73), 04/18/2016 11:40:28
BlazarArc: 把所有member塞入list<Control*> 然後去實作show?04/18 11:43
我主要的目的是可以讓一個 Frame 一看 class difinition,視窗的布局就呈現在眼前, 想要什麼元件就直接加上去就好 要是用容器裝的話好像就沒有這種效果了… ※ 編輯: CoNsTaR (117.19.195.203), 04/18/2016 11:51:20 ※ 編輯: CoNsTaR (117.19.195.203), 04/18/2016 12:01:44
BlazarArc: 看class header就知道布局...你要init在header?04/18 11:57
就是有點像 wxWidgets 那樣可以讓使用者繼承他的 frame 和 app etc… 然後我希望做到能夠讓使用者在 class 裡自由增加元件 ※ 編輯: CoNsTaR (117.19.195.203), 04/18/2016 12:07:03 ※ 編輯: CoNsTaR (117.19.195.203), 04/18/2016 12:20:31
bibo9901: 可以用tuple啊 如果不嫌醜的話XD 04/18 12:29
IKAFIRE: 新增一個函式讓子類別登錄元件? 04/18 12:33
嗯嗯 其實我就是希望做到 reflection over members, independs of how 其實我的問題好像就是 N4111 裡提到的 reflection 的應用 automated GUI-generation XD ※ 編輯: CoNsTaR (117.19.195.203), 04/18/2016 12:40:14
damody: UE4有做 不過各有利弊啦 04/18 12:41
loveflames: 用typelist? 04/18 13:17
我現在也正在研究 type traits 這好像是一個很有趣的東西 ※ 編輯: CoNsTaR (117.19.195.203), 04/18/2016 13:46:50
longlongint: 然後你做完之後發現自己實作了 python 04/18 14:57
BlazarArc: 樓上XD 04/18 15:45
ctrlbreak: C++如果能怎樣怎樣寫就好了...然後就有新的語言誕生 04/18 21:53
uranusjr: 是不會那麼誇張啦, 最多只會發現你實作了 Qt 的 meta 04/27 15:58
uranusjr: object system 和 MOC XD 04/27 15:59