gpt4 book ai didi

c++ - 我可以将符号数组传递给宏吗?

转载 作者:行者123 更新时间:2023-11-28 07:35:03 25 4
gpt4 key购买 nike

我正在将一些数据从字符串映射解析为不同的结构,每个结构都有自己的一组成员变量。设置可能是这样的:

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

这是一个很大的帮助。但实际上我的结构都有不同数量的成员,需要在每种情况下定义一个新的宏。

有没有一种方法可以将一组符号传递给宏并循环访问它们?

像这样:

分配( map ,目标,{param0Name,param1Name,param2Name})

最佳答案

我会说使用宏你就不走运了。确实有可变参数宏允许提前传递参数,但这就是您可以用它们做的所有事情。

我试过了

#define B(x, y) int x = y;
#define A(x, y, ...) B(x, y) A(__VA_ARGS__)

void f()
{
A( g, 1, h, 2);
}

显然不起作用。向预处理器添加东西的提议很常见,但通常会被拒绝。

关于c++ - 我可以将符号数组传递给宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com