Linderdaum Engine を使用しようとしていますが、次のような多くの奇妙な宣言が見つかりました。
class scriptfinal netexportable ClassName: public iObject
これらの奇妙な名前scriptfinal
とnetexportable
はマクロです。しかし、それらは空であると定義されています。なぜ誰かがこの種の定義を必要とするのでしょうか?
Linderdaum Engine を使用しようとしていますが、次のような多くの奇妙な宣言が見つかりました。
class scriptfinal netexportable ClassName: public iObject
これらの奇妙な名前scriptfinal
とnetexportable
はマクロです。しかし、それらは空であると定義されています。なぜ誰かがこの種の定義を必要とするのでしょうか?
それらは空なので、C++コンパイラはそれらを気にしません。
Linderdaum Engineは、クラスに関するメタ情報を生成するために、C++ソースを前処理します。
これらのマクロは、スクリプト言語(scriptfinal
)および.NETシリアル化コード(netexportable
)の情報を生成するためにプリプロセッサによって使用される可能性があります。
たとえば、誰かが scriptfinal マクロを次のように設定する可能性があります。
#define scriptfinal __declspec(dllimport)
取得するため:
class __declspec(dllimport) ClassName: public iObject {};
__declspec は Microsoft 固有の拡張であるため、通常は移植可能なコードのマクロ展開で使用されます。Linux 環境用にコンパイルする場合、マクロは空であるため__declspec
コンパイラには表示されず、Windows では上記のように定義されます。