如何将两个 X-Macro 合并在一起?

How can I merge two X-Macros together?

提问人:JerSci 提问时间:4/23/2022 最后编辑:Jonathan LefflerJerSci 更新时间:8/23/2022 访问量:175

问:

我有很多重复的代码,需要我在某些函数或某些操作中频繁使用不同的数据集。即如下图所示(数字和字母只是占位符,我需要做的就是使用 X 宏将两组数据串在一起)

a = 1
a = 2
a = 3
a = 4
.
.
.

然后

b = 1
b = 2
b = 3
.
.
.

c = 1
c = 2
c = 3
.
.
.

我试图创建一个 X-macro,将以下两个 X-macro 合二为一

//X-macro 1
#define SET_1 \
X(a) \
X(b) \
X(c) \
//X-macro 2
#define SET_2 \
X(1) \
X(2) \
X(3) \
X(4) 

有什么帮助吗?

C++ C X-宏

评论

2赞 Aconcagua 4/23/2022
C 还是 C++?决定,因为 C++ 可能会提供 C 中不可用的替代方案......
0赞 Turtlefight 4/23/2022
“组合”应该是什么样子?X-Macros 通常只接受一个参数,那么这两个集合应该如何组合呢?您能否提供一个最小的示例来说明您计划如何使用它以及输出应该是什么样子?
0赞 JerSci 4/23/2022
@Turtlefight我提供的那个是最小的例子,我只是删除了所有不必要的混乱。它看起来像这样(杂乱无章),然后基本上我必须对 n 个不同的寄存器执行此操作 n 次,这就是为什么我想要一个 x-macro,所以它也变得简单且易于维护regA = regA; regA = regB; regA = regC; regA = regD;regB = regA; regB = regB; regB = regC; regB = regD;
0赞 JerSci 4/23/2022
@Aconcagua是 C++
0赞 Aconcagua 4/25/2022
这个扩展示例看起来像一个寄存器接收所有其他寄存器的值。第二个例子可能是有缺陷的,你在写信之后又写给自己,所以你实际上会写信给除它自己以外的所有其他人......regBregAregAregA

答:

0赞 chqrlie 4/23/2022 #1

这种方法怎么样:

#define X_abc(X,X2) \
X(a,X2) \
X(b,X2) \
X(c,X2)

#define X_1234(x,X2) \
X2(x,1) \
X2(x,2) \
X2(x,3) \
X2(x,4) 

#define SET(x,y)     x = y;
#define DEFINE(x,y)  int x = y;

X_abc(X_1234,DEFINE)

评论

0赞 ro88 3/3/2023
当我们有不同的元素数量时,我们可以做上述方法吗?#define X_abc(X,X2) \ X(a,X2) \ X(b,X2) \ X(c,X2) #define X_1234(x,X2) \ X2(x,1) \ X2(x,2) \ X2(x,3)
0赞 chqrlie 3/3/2023
@ro88:是的,当然,我认为这没有问题