我在使用以下宏时遇到麻烦,并且发现 token 粘贴操作符(##
)正在吞噬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() { }
有更好的解决方案吗?
最佳答案
我认为您的问题是您不想在这里使用 token 粘贴。如果将宏更改为
#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }
那如果你写
MY_FUNCTION(bool)
它将扩展为
static bool MyFunction() { }
我假设这是您要执行的操作,因为看不到您正在尝试将
aReturnType
参数粘贴到宏上的内容。希望这可以帮助!
关于c++ - token 粘贴运算符(##)正在占用我的C++宏中的空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8994169/