#define DEFINE_STAT(Stat) \
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;
上面的内容摘自Unreal 4,我知道我可以在虚幻的论坛上提出这个问题,但是我认为这是一个一般的C ++问题,值得在这里提出。
我知道第一行定义了一个宏,但是我并不精通C ++中的预处理器,所以我迷路了。逻辑告诉我反斜杠表示声明继续到下一行。
FThreadSafeStaticStat看起来有点像模板,但是里面有#的代码,而且是我在C ++中从未见过的语法
有人可以告诉我这是什么意思吗?我了解您可能无法使用Unreal 4,但这只是我不了解的语法。
最佳答案
##
是用于串联的预处理器运算符。
所以如果你用DEFINE_STAT(foo)
在代码中的任何地方,它都被替换为struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;
在编译代码之前。
这是我的a blog post中的另一个示例,以进一步说明这一点。
#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m ## s ## u ## t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Stumped?\n");
}
该程序将成功编译并执行,并产生以下输出:
Stumped?
在此代码上调用预处理器时,
begin
被替换为decode(a,n,i,m,a,t,e)
decode(a,n,i,m,a,t,e)
被替换为m ## a ## i ## n
m ## a ## i ## n
被替换为main
因此,有效地将
begin()
替换为main()
。关于c++ - ##(双哈希)在预处理程序指令中做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55563244/