【讨论】有什么办法可以自动获取全部类成员的成员指针吗

miliggate 2013-03-01 09:22:27
我想了一段时间没有相出什么结果。。
原本考虑的是让类用户自己一个个将成员指针传递进来
然后用std::vector<boost::any>来保存这些成员指针
但是有时候类的变量太多,反而变的麻烦起来了
想要用成员指针基本地址一个个的增加,然后获取指针,
但是发现在类有虚函数的时候会出错,而且编译器的实现也不同,虚指针放的位置也不一样
有什么办法可以获得成员指针吗包括静态的
...全文
184 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
miliggate 2013-03-02
  • 打赏
  • 举报
回复
引用 11 楼 supermegaboy 的回复:
呵呵,虽然楼主懂得使用MPL的类型序列容器,但对于类对象模型却是个白痴,这样做倒不如直接使用类数据成员指针。
中枪了。。。
飞天御剑流 2013-03-02
  • 打赏
  • 举报
回复
呵呵,虽然楼主懂得使用MPL的类型序列容器,但对于类对象模型却是个白痴,这样做倒不如直接使用类数据成员指针。
taodm 2013-03-02
  • 打赏
  • 举报
回复
不要在错误的问题上讨论正确解。既然你已经能力强到可以用mpl了,技术上的问题就不多说了
bravery36 2013-03-02
  • 打赏
  • 举报
回复
还是没看懂lz要干什么。我在stl方面非常弱,但是我工作这几年也足以解决我遇到的问题,我感觉lz是不是用牛刀在杀鸡。
Enter空格 2013-03-01
  • 打赏
  • 举报
回复
你获取所有类成员地址的目的是干什么? 先把需求明确了,在想解决办法。
rocktyt 2013-03-01
  • 打赏
  • 举报
回复
类成员有些什么只有程序员和编译器知道,代码里是没办法得到类里有哪些成员的 不太清楚你的具体需求,不过你可以试试offsetof宏来获取成员变量的偏移再然后加上this指针强转为各自的类型试试
tonforce 2013-03-01
  • 打赏
  • 举报
回复
引用 3 楼 chuachua66 的回复:
你想想消息队列,全都要自己一个一个ON_MESSAGE注册,如果有你说的办法不就不用这些宏了。
同意。 开始还没想明白,呵呵,这个不好搞啊。楼主能想到这个问题,挺佩服的,我都没想过,惭愧。
miliggate 2013-03-01
  • 打赏
  • 举报
回复
struct A { int D,B,C; }; template<class class_name,class memberlist> class read_member { typedef mpl::iterator<memberlist>::type FirstMember; typedef class_name::mpl::dref<FirstMember>::type FirstMemberPoint; typedef FirstMemberPoint+mpl::dref<mpl::next<FirstMember>::type>::type SecondPoint; //剩下的也可以利用Mpl的编译器递归来完成 //然后在讲这些member_point保存到mpl::vector //由于member_ponit是编译期间的常量,所以可以保存 //在用mpl::iterator来读取这些指针 //最后利用类对象的指针加上成员指针就可以访问成员了 //实现自动读取成员 };
miliggate 2013-03-01
  • 打赏
  • 举报
回复
突然想起来用 mpl::vector的方法,让用户来填按照自己声明成员的顺序 然后剩下的工作也可以利用mpl库莱完成 我们需要第一个成员指针 然后每一个加上用mpl::vector中提取的类型大小就可以到下一个了 当然,首先要有friend声明 struct A { int D,B,C; }; mpl::iterator<mpl::vector<int,int,int> >::type First; MemberPoint+sizeof(mpl::dref<First>::type); 这样就可以全部在编译器完成所有的任务 而且用户只需要填写vector就Ok了
starytx 2013-03-01
  • 打赏
  • 举报
回复
有多自动?你把类成员都设计成public,不就可以访问到所有成员了吗?既然访问到成员了,不就可以获得其地址了
chuachua66 2013-03-01
  • 打赏
  • 举报
回复
你想想消息队列,全都要自己一个一个ON_MESSAGE注册,如果有你说的办法不就不用这些宏了。
luciferisnotsatan 2013-03-01
  • 打赏
  • 举报
回复
不太清楚lz想要的效果是什么
healer_kx 2013-03-01
  • 打赏
  • 举报
回复
不用想了,没有办法。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧