有没有一种从字符串表示中设置C/C++成员变量的好方法? (内省-精简版)

前端之家收集整理的这篇文章主要介绍了有没有一种从字符串表示中设置C/C++成员变量的好方法? (内省-精简版)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个结构,其中包含一些我希望能够从字符串中获取和设置的成员.鉴于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

编辑:
感谢maxim1000的’map to int Type :: *’技巧 – 这对我有用:

#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;

猜你在找的C&C++相关文章