#pragma explicit_rtti
pragma 指令の概要:インデックス への移動
構文(「疑似文法」を参照)
#pragma explicit_rtti [VISIBILITY-CLAUSE] VISIBILITY-CLAUSE := methods | properties | fields (VISIBILITY-EXPR) VISIBILITY-EXPR := [__published], [public], [protected], [private]
説明
#pragma explicit_rtti
を使用すると、Delphi 形式のクラスやレコードに対して生成される RTTI の量を制御することができます。特定の可視性(public、protected など)のメンバの種類(メソッド、フィールドなど)に対して RTTI を生成するかを明示的に指定できます。
#pragma explicit_rtti
を指定すると、その指定は、別の #pragma explicit_rtti
を指定して設定を変更するまで、ファイル内の残りの部分でその後に見つかったすべてのクラス メンバ宣言に適用されます。
メンバの種類(メソッド、フィールド、プロパティ)はどの順で指定しても構いません。指定したメンバの種類それぞれに対する引数は、以下を任意に組み合わせてコンマで区切ったリストでなければなりません。
- __published
- public
- protected
- private
次のようにリストが空の場合には
#pragma explicit_rtti methods()
その種類のメンバはどれも公開されません。指定されていないメンバの種類(上記の例ではプロパティとフィールドが指定されていません)に関しては、現在の設定が引き続き使われます。
デフォルト設定
デフォルトの設定は次のとおりです。
#pragma explicit_rtti methods (__published, public) properties (__published, public) fields(__published, public, protected, private)
以下の表はこの設定の内容を示したものです。
メンバの可視性 メンバの種類 |
__published | public | protected | private |
メソッド | + | + | ||
プロパティ | + | + | ||
フィールド | + | + | + | + |
次の例のように、メンバ リストをプリプロセッサ マクロとして定義することができます。
#define VIS_ANY __published, public, protected, private
#define VIS_NONE
#pragma explicit_rtti methods(VIS_ANY) properties(VIS_NONE)
LiveBinding での #pragma explicit_rtti
の使用
LiveBinding では RTTI(実行時型情報)を使用します。これは、Delphi で記述されたクラスや型に対して Delphi コンパイラにより生成されます。C++ アプリケーションでは、Delphi で記述されたクラスや型のみ使用している場合は、#pragma explicit_rtti
を使用する必要はありません。TForm、TButton、TMemo などの標準的な VCL クラスまたは FMX クラスがすべてそれに該当します。これらの VCL(または FMX)クラスおよび型は Delphi で記述されており、それらには、Delphi コンパイラにより生成された RTTI が既に組み込まれています。
- C++ で記述した Delphi に似たクラスや型を使用する C++ アプリケーションで LiveBinding を使用する場合は、
#pragma explicit_rtti methods()
指令を使用する必要があります。 - Delphi で記述したクラスや型(VCL や FMX のクラスおよび型など)が含まれる C++ アプリケーションで LiveBinding を使用する場合は、
#pragma explicit_rtti methods()
指令を使用しないでください。