有没有一种从字符串表示中设置C/C++成员变量的好方法? (内省-精
发布时间:2020-12-16 05:06:09 所属栏目:百科 来源:网络整理
导读:我有一个结构,其中包含一些我希望能够从字符串中获取和设置的成员.鉴于C没有任何内省,我想我需要一些宏的创造性解决方案,stringize运算符和boost :: bind.我不需要完整的序列化或内省,更像是“内省精简” 我想有一些类似的东西: struct MyType { int fieldA
我有一个结构,其中包含一些我希望能够从字符串中获取和设置的成员.鉴于C没有任何内省,我想我需要一些宏的创造性解决方案,stringize运算符和boost :: bind.我不需要完整的序列化或内省,更像是“内省精简”
我想有一些类似的东西: struct MyType { int fieldA; int fieldB; }; DECLARE_STRING_MAP(MyType,fieldA); DECLARE_STRING_MAP(MyType,fieldB); MyType t; SET_VALUE_FROM_STRING(MyType,t,"fieldA","3") 而不是有一个巨大的if语句. 知道是否有一个简洁的解决方案吗? 相关问题:Object Reflection 编辑: #define DEFINE_LOOKUP_MAP(Type) std::map<AnsiString,int Type::*> mapper #define ADD_FIELD_MAPPING(Type,Field) mapper[#Field]=&Type::Field #define SET_FIELD_FROM_MAP(Type,Field,var,value) var.*(mapper[#Field])=value DEFINE_LOOKUP_MAP(MyType); ADD_FIELD_MAPPING(MyType,fieldA); ADD_FIELD_MAPPING(MyType,fieldB); SET_FIELD_FROM_MAP(MyType,fieldA,obj,3); 解决方法
如果所有类型都相同,您可以使用以下内容:
std::map<std::string,int MyType::*> mapper; mapper["fieldA"]=&MyType::fieldA; mapper["fieldB"]=&MyType::fieldB; ... MyType obj; obj.*(mapper["fieldA"])=3; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |