#pragma explicit_rtti

提供: Appmethod Topics
移動先: 案内検索

pragma 指令の概要:インデックス への移動


構文(「疑似文法」を参照)

#pragma explicit_rtti [VISIBILITY-CLAUSE]
VISIBILITY-CLAUSE := methods | properties | fields (VISIBILITY-EXPR)
VISIBILITY-EXPR := [__published], [public], [protected], [private]

説明

#pragma explicit_rtti を使用すると、Object Pascal 形式のクラスやレコードに対して生成される 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(実行時型情報)を使用します。これは、Object Pascal で記述されたクラスや型に対して Object Pascal コンパイラにより生成されます。C++ アプリケーションでは、Object Pascal で記述されたクラスや型のみ使用している場合は、#pragma explicit_rtti を使用する必要はありません。TFormTButtonTMemo などの標準的な VCL クラスまたは FMX クラスがすべてそれに該当します。これらの VCL(または FMX)クラスおよび型は Object Pascal で記述されており、それらには、Object Pascal コンパイラにより生成された RTTI が既に組み込まれています。

  • C++ で記述した Object Pascal に似たクラスや型を使用する C++ アプリケーションで LiveBinding を使用する場合は、#pragma explicit_rtti methods() 指令を使用する必要があります。
  • Object Pascal で記述したクラスや型(VCL や FMX のクラスおよび型など)が含まれる C++ アプリケーションで LiveBinding を使用する場合は、#pragma explicit_rtti methods() 指令を使用しないでください。

関連項目