【发布时间】:2014-05-23 09:28:00
【问题描述】:
#define DEFINE_STAT(Stat) \
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;
以上代码取自 Unreal 4,我知道我可以在 unreal 论坛上提问,但我认为这是一个一般性的 C++ 问题,值得在这里提出。
我知道第一行定义了一个宏,但是我并不精通 C++ 中的预处理器恶作剧,所以我迷路了。逻辑告诉我反斜杠意味着声明继续到下一行。
FThreadSafeStaticStat 看起来有点像模板,但里面有 #'s 和我以前在 C++ 中从未见过的语法
谁能告诉我这是什么意思?我了解您可能无法访问 Unreal 4,但这只是我不了解的语法。
【问题讨论】:
-
您可以阅读有关## operator on cppreference 等内容
-
##是/可以称为连接运算符。 -
哦,太酷了!它解释了很多,谢谢。但是为什么要使用 struct 关键字呢?该行看起来更像是一个变量定义
-
据我所知,
struct引入了一个详细的类型说明符。 -
正式名称为“token pasteing operator”,因为它结合了两个预处理token来产生另一个。请注意,它仅在结果是有效的预处理令牌时才有效,例如你不能用
+ ## 3来制造+3。 (但你当然可以+ 3,不用运营商)
标签: c++ c concatenation c-preprocessor