【发布时间】:2012-07-24 08:00:57
【问题描述】:
我正在尝试使用 Linderdaum 引擎,发现有很多奇怪的声明,例如:
class scriptfinal netexportable ClassName: public iObject
这些奇怪的名字scriptfinal 和netexportable 是宏。但是它们被定义为空的。
为什么有人需要这种定义?
【问题讨论】:
标签: c++ class linderdaum
我正在尝试使用 Linderdaum 引擎,发现有很多奇怪的声明,例如:
class scriptfinal netexportable ClassName: public iObject
这些奇怪的名字scriptfinal 和netexportable 是宏。但是它们被定义为空的。
为什么有人需要这种定义?
【问题讨论】:
标签: c++ class linderdaum
它们是空的,因此 C++ 编译器不会关心它们。
Linderdaum 引擎对 C++ 源进行预处理,以生成有关类的元信息。
这些宏最有可能被它们的预处理器用来为其脚本语言 (scriptfinal) 和 .NET 序列化代码 (netexportable) 生成信息。
【讨论】:
例如,有人可能将 scriptfinal 宏设置为:
#define scriptfinal __declspec(dllimport)
得到:
class __declspec(dllimport) ClassName: public iObject {};
由于 __declspec 是 Microsoft 特定的扩展,因此它通常用于可移植代码中的宏扩展。在为 Linux 环境编译时,宏是空的,所以 __declspec 对编译器不可见,在 Windows 下它们将按上述定义。
【讨论】: