令牌粘贴操作符(##)正在我的C ++宏中占用空格

时间:2012-01-24 21:06:58

标签: c++ macros concatenation c-preprocessor

我在使用以下宏时遇到问题,我发现令牌粘贴操作符(##)占用了static和返回类型之间的空格:

#define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { }

所以预处理器正在转变:

MY_FUNCTION(bool)

进入这个:

staticbool MyFunction() { }

导致奇怪的编译错误。

我提出了在static关键字周围添加括号的想法:

// This works but is kind of weird
#define MY_FUNCTION(aReturnType) (static) ##aReturnType MyFunction() { }

有没有更好的解决方案?

2 个答案:

答案 0 :(得分:8)

我认为你的问题是你不想在这里使用令牌粘贴。如果您将宏更改为

#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }

然后,如果你写

MY_FUNCTION(bool)

它会扩展到

static bool MyFunction() { }

我假设这是您想要做的,因为我无法看到您尝试将aReturnType参数粘贴到宏上。

希望这有帮助!

答案 1 :(得分:3)

应该怎么做?您告诉它将staticbool粘贴在一起。如果你不想要那个而你想要static bool,那么不要将它们粘贴在一起