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; }}[解决办法]
[解决办法]
兄弟你提高游戏和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找到对应的属性描述结构体.
剩下的就是用这个结构描述体了.
[解决办法]