考虑以下用户样式的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()像以前一样声明吗?