正在展开/重新组合宏元组

Expanding / Recombining macro tuple

本文关键字:组合 元组 新组合      更新时间:2023-10-16

我正在尝试用C++中的宏执行以下操作:

#define ESC(...) __VA_ARGS__
#define f1(a,b,c) {a:b:c}
#define f2(ab,c) ( ESC ab,c )
#define f3(ab,c) f1( ESC f2( ab, c ) )
f2((myA,myB),myC) // RESULT: (myA,myB,myC)
f3((myA,myB),myC) // DESIRED RESULT: {myA:myB:myC}

换句话说,我有一组由元组(ab)和展开的参数(c)包装的参数,我需要将这些参数传递到另一个获取参数(a,b,c)的宏函数中。

上面的宏f2从(ab,c)中给出了(a,b,c),但从那里我不能使用(a,b,c)元组来调用f1。很明显,我处理这个问题的方法不对。有人能给我指一个更好的方法吗?

我可以在这个解决方案中使用BOOST_PP,如果这能让事情变得更容易的话。

提前感谢!

#define fst(first, second) first
#define snd(first, second) second
#define f3(ab,c) f1( fst ab, snd ab, c )