#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
    static CEntityFactory<DLLClassName> mapClassName( #mapClassName );

这是来自Alien Swarm mod For Half-Life2的宏,旨在与MSVC一起编译。

我从来没有见过前面有一个论点。 # 在宏之前,我不确定这是MSVC特定的东西还是不常见。这是什么意思?

有帮助吗?

解决方案

这是标准C和C++的一部分,不是特定于实现的。该 # 预处理运算符对其参数进行字符串化。它为其操作数指定的参数(在本例中为参数)接受传入宏的任何令牌 mapClassName),并从它们中生成一个字符串。所以,举一个简单的例子,

#define STRINGIZE(x) # x

STRINGIZE(Hello World)
// gets replaced with
"Hello World"

请注意,参数标记是 不是 宏在它们被字符串化之前被替换,所以如果 HelloWorld 被定义为一个宏,结果仍然是相同的。你需要 使用额外的间接级别 要获取参数宏替换(链接的答案讨论连接运算符, ##, ,但同样适用于字符串化运算符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top