首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++遍历结构体的字段,请大家指点小弟我的方法

2012-04-06 
C++遍历结构体的字段,请大家指点我的方法!C++本身不支持遍历结构体的字段,我举个例子:ShowPersons()用来打

C++遍历结构体的字段,请大家指点我的方法!
C++本身不支持遍历结构体的字段,我举个例子:
ShowPersons()用来打印所有人的各项信息。问题在于,如果其他人只能看到Person的定义,然后要对Person的字段进行遍历,岂不是又要写个遍历函数?如果Persons有上百个字段,如果打印格式经常变化,这样岂不是很容易出错?

C/C++ code
struct Person{    string name;    int age;    Person(string name_, int age_)    {        name = name_;        age = age_;    }};void MakePersons(vector<Person>& persons){    persons.clear();    persons.push_back(Person("Jack", 10));    persons.push_back(Person("Tom", 30));    persons.push_back(Person("Lucy", 15));}void ShowPersons(vector<Person>& persons){    for (size_t i = 0; i < persons.size(); i++)    {        cout<<"name: "<<persons[i].name.c_str()<<"\t";        cout<<"age: "<<persons[i].age<<endl;    }}


[解决办法]
探讨

只是个示例,具体用的时候根据需要调整,用Prop.h主要是方便,改成回调方式也只是几行代码的事,如果代码给到这份上还写不出自己的东西,那也就无话可说了

思想最重要,对吧?呵呵

[解决办法]
兄弟你提高游戏和UI,是不是要做属性编辑工具?
这中间还要考虑编辑控件的类型以及参数约束问题.
分两步走吧:一,手工宏完成各个成员变量的枚举,以及相关描述;二,写自动扫描工具生成代码,完成手工宏的功能.话说我一直没有写这个自动扫描工具,因为觉得手工宏还顶得住.
我设想中是这么写:
NEED_EXPORT_MEMBER_INFO
struct XXX{
EXPORT_MEMBER("DataTime","约束条件")
time_t nTime;
};
假定这个文件存成了a.h
正常代码中
#define NEED_EXPORT_MEMBER_INFO
#define EXPORT_MEMBER(a,b)
然后工具扫描的文件是a.export.cpp
a.export.cpp只放在编辑工具里编译,所有的*.export.cpp可以生成全部导出的类的描述,并通过RTTI找到对应的属性描述结构体.
剩下的就是用这个结构描述体了.
[解决办法]
探讨

这方法我自己的确想不到啊

不过还有个问题,是否对于每个这种结构体,都要把这整定义代码复制到新的头文件中?

不过这也不是什么大问题,可以再写个生成器,对每个有这种需求的结构体自动生成定义文件

热点排行