C++ 令牌粘贴操作符(###)在my C++;宏
我在使用以下宏时遇到问题,我发现令牌粘贴操作符(C++ 令牌粘贴操作符(###)在my C++;宏,c++,macros,concatenation,c-preprocessor,C++,Macros,Concatenation,C Preprocessor,我在使用以下宏时遇到问题,我发现令牌粘贴操作符(#)占用了静态和返回类型之间的空间: #define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { } 因此,预处理器正在改变这一点: MY_FUNCTION(bool) 为此: staticbool MyFunction() { } 这导致了奇怪的编译错误 我想到了在static关键字周围加括号的想法: // This works but is kind of we
#
)占用了静态
和返回类型之间的空间:
#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() { }
有更好的解决方案吗?我认为您的问题是不想在这里使用令牌粘贴。如果将宏更改为
#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }
那么如果你写
MY_FUNCTION(bool)
它将扩展到
static bool MyFunction() { }
我假设这就是您想要做的,因为我看不到您试图将aReturnType
参数粘贴到宏上的内容
希望这有帮助 它应该怎么做?您让它将
static
和bool
粘贴在一起。如果您不想这样做,而是想使用静态bool
,那么请不要将它们粘贴在一起?此操作员的工作描述中包含了吃空格。谢谢您的解释。我对C++宏有点生疏,忘记了我只能使用宏参数。