如何遍历类中的所有变量(在线讨论)

henanlsl 2010-10-29 08:44:39
对于一个类
class Test
{
T1 a;
T2 b;
T3*c;
void func1();
}
怎么通过遍历得到变量数目,然后对每个变量进行操作的?
我的基本思路是让所有的T1,T2,T3 都是继承一个COBJECT 基类,这个基类可以自动计算继承类的变量数并遍历其各变量。
现在的问题是如何设计这个基类,是不是也可设计类似于 CRUNTIME的类。
大家帮看看该如何设计。发现比想像中麻烦。
...全文
530 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yutaooo 2010-10-30
  • 打赏
  • 举报
回复

这是个比较复杂的东西。LZ真正需要的是一个反射库。C++0x里,反射库基本是没希望了。几个候选者中,我觉得reflex c++是不错的。

参考一下:
http://root.cern.ch/drupal/content/reflex

要有心理准备,这绝对不是个简单的东西。
ryfdizuo 2010-10-30
  • 打赏
  • 举报
回复
正常的做法应该很难实现遍历类的变量啊~
CUDA是个好东西,^_^
henanlsl 2010-10-29
  • 打赏
  • 举报
回复
你是说这样,其实结构体我也想去,总感觉不地道有点
Test()
{
param.addnew(new T1(name1,id1);
param.addnew(new T2(name2,id2));
param.addnew(new T3(name3,id3));
}

不知道可不可以直接
像平常一样在类申明中直接定义 T1 name1之类的。

[Quote=引用 4 楼 dizuo 的回复:]

编号不方便,可以用型别替代,使用名字索引,用map存储。
如果要包裹各种类型的变量,可以考虑使用boost::any,,,不过any会丢失型别类型。。
[/Quote]
henanlsl 2010-10-29
  • 打赏
  • 举报
回复
同上楼[Quote=引用 6 楼 rrrfff 的回复:]
有什么实际用处?
[/Quote]
henanlsl 2010-10-29
  • 打赏
  • 举报
回复
我在写一个CUDA类,就是把内存中的数据,拷贝到显存中去。而显存中内存分配方式不一样[Quote=引用 7 楼 hnuqinhuan 的回复:]
干啥用的??
[/Quote]
無_1024 2010-10-29
  • 打赏
  • 举报
回复
干啥用的??
RLib 2010-10-29
  • 打赏
  • 举报
回复
有什么实际用处?
dingshaofengbinbin 2010-10-29
  • 打赏
  • 举报
回复
map可以吗??
ryfdizuo 2010-10-29
  • 打赏
  • 举报
回复
编号不方便,可以用型别替代,使用名字索引,用map存储。
如果要包裹各种类型的变量,可以考虑使用boost::any,,,不过any会丢失型别类型。。
henanlsl 2010-10-29
  • 打赏
  • 举报
回复
你那个是统计对象个数,我是想统计出一个类中变量的个数和各变量的大小(其实目标就是:根据一个类A,自动创建另一个类的类AA的对象:
AA类中的所有变量是类A所有变量的复制(也不完全一样,分配的内存不一样);)

另一个问题就是:如果换成类C,也同样做到:
(根据类C,自动创建另一个类似的的类CC的对象:
CC类中的所有变量是类C所有变量的复制(也不完全一样,分配的内存不一样);

[Quote=引用 2 楼 shexinwei 的回复:]

既然要统计类的对象的个数以及地址。

那么采用静态变量就可以了:
设置一个静态int型变量统计对象的个数;
设置一个静态的Test *数组存储每一个对象的地址。
[/Quote]
shexinwei 2010-10-29
  • 打赏
  • 举报
回复
既然要统计类的对象的个数以及地址。

那么采用静态变量就可以了:
设置一个静态int型变量统计对象的个数;
设置一个静态的Test *数组存储每一个对象的地址。
henanlsl 2010-10-29
  • 打赏
  • 举报
回复
[code=C/C++]
CParamCout
{
private:
void *p;
int num;
public:
GetNum();
AddNew();
}

class Test
{
CParamCount param;
Test()
{
param.addnew(new T1);
param.addnew(new T2);
param.addnew(new T3);
}
void func1()
{
int size=param.GetNum();
}
}
code]

写了上面这段代码,觉得有些问题,假如定义多个T1变量,完全靠编号确定是哪个参数就不太方便了。不知道有没有更好的建议。

64,281

社区成员

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

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