考虑以下用户样式的x-macro:
#define PRIMES_X(func) \
func(2) \
func(3) \
func(5)
func
我们可以使用它用前三个素数重复调用传入的宏。例如:
#define MAKE_FUNC(num) void foo ## num();
PRIMES_X(MAKE_FUNC)
将声明返回 void 的函数foo2()
,foo3()
和foo5()
.
到目前为止,一切都很好。现在假设我想在 x-macro 本身的定义中使用一个宏作为参数,如下所示:
#define MAX_PRIME 5
#define PRIMES_X(func) \
func(2) \
func(3) \
func(MAX_PRIME)
它不起作用,因为MAKE_FUNC
现在将尝试声明void fooMAX_PRIME()
,因为(我想)令牌连接发生而不扩展MAX_PRIME
。
我可以解决这个问题,让它foo5()
像以前一样声明吗?