我将字符串映射中的一些数据解析为不同的结构,每个结构都有自己的一组成员变量。该设置可以是这样的:我可以将一组符号传递给宏吗?
struct AStruct
{
int a;
float b;
};
map<string,string> aMap;
aMap["a"] = "3";
aMap["b"] = "2.42";
struct BStruct
{
string a;
char b;
};
map<string,string> bMap;
bMap["a"] = "asdf";
bMap["b"] = 'k';
由于有很多结构,但数载元,我已经创建了一套有用的模板解析功能:现在
template <typename T>
void parse(string origin, T& dest);
,为了防止自己从具有定义一个不同的功能,将值分配给每个结构,我可以使用宏,这样的:
#define ASSIGN(map, dest, param0Name, param1Name) \
dest.param0Name = map[#param0Name]; \
dest.param1Name = map[#param1Name]; \
并分配像这样:
AStruct myA;
ASSIGN(aMap, myA, a, b);
这是一个很大的帮助。但实际上我的结构都有不同数量的成员,需要在每种情况下定义一个新的宏。
有没有一种方法可以将一组符号传递给宏并遍历这些?
事情是这样的:
ASSIGN(地图,DEST,{param0Name,param1Name,param2Name})
你可能想看看Boost.PP为这个:http://www.boost.org/doc/libs/1_53_0/libs/preprocessor/doc/index.html – slaphappy