楼主:
CoNsTaR ((const *))
2016-04-18 06:31:58开发平台(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):
所以有人才说C++是半吊子的OOPL嘛www。效率不吃紧的话,Hash map或平衡树放Function pointer有搞头吧
其实我看不太懂XD 你是要在compile time就取出所有的members吗?真有reflection还是得在runtime啊…
作者:
Caesar08 (Caesar)
2016-04-18 10:33:00看不懂问题... 你可以说清楚一点吗?有点好奇,N3996、N4111、N4451为啥都没出现在gcc上面Static reflection这是你要找的东西吗?
作者:
BlazarArc (Midnight Sun)
2016-04-18 11:43:00把所有member塞入list<Control*> 然后去实作show?看class header就知道布局...你要init在header?
作者:
bibo9901 (function(){})()
2016-04-18 12:29:00可以用tuple啊 如果不嫌丑的话XD
作者:
IKAFIRE (没有)
2016-04-18 12:33:00新增一个函式让子类别登录元件?
作者:
damody (天亮damody)
2016-04-18 12:41:00UE4有做 不过各有利弊啦
作者: longlongint (华哥尔) 2016-04-18 14:57:00
然后你做完之后发现自己实作了 python
作者:
BlazarArc (Midnight Sun)
2016-04-18 15:45:00楼上XD
作者: ctrlbreak 2016-04-18 21:53:00
C++如果能怎样怎样写就好了...然后就有新的语言诞生
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2016-04-27 15:58:00是不会那么夸张啦, 最多只会发现你实作了 Qt 的 metaobject system 和 MOC XD