其他分享
首页 > 其他分享> > c – 按名称获取属性

c – 按名称获取属性

作者:互联网

我有一个包含大约25个元素的结构定义

struct X { field 1; field 2; .. };    

而我正在尝试用一些地图值填充它

Map<String,String> A    

这样做n次似乎很烦人

X->xx = A["aaa"]    

每次我想填写我的消息结构.

是否可以通过名称访问成员,例如

X->get_instance_of("xx").set(A["aaa"]);    

把它放到一个循环中?

解决方法:

C缺乏更多动态语言的内置反射功能,因此您无法使用该语言的开箱即用功能.

但是,如果所有成员属于同一类型,则可以使用指向成员的指针映射并进行一些准备:

 // typedef for the pointer-to-member
 typedef int X::*ptr_attr;

 // Declare the map of pointers to members
 map<string,ptr_attr> mattr;
 // Add pointers to individual members one by one:
 mattr["xx"] = &X::xx;
 mattr["yy"] = &X::yy;

// Now that you have an instance of x...
 X x;
// you can access its members by pointers using the syntax below:
 x.*mattr["xx"] = A["aa"];

标签:c,struct,getelementsbyname
来源: https://codeday.me/bug/20190923/1813948.html