実行時型情報

提供: RAD Studio
移動先: 案内検索

Delphi データ型および言語概念のサポート への移動


Object Pascal には、RTTI を扱う言語構文があります。C++ に対応するものもあります。これらを次の表に示します。


RTTI の例(Object Pascal を C++ にマッピングした場合)

Object Pascal の RTTI C++ の RTTI
if Sender is TButton (* ... *)
if ((dynamic_cast<TButton*>(Sender)) != NULL)
// dynamic_cast returns  NULL on failure
b := Sender as TButton; 
(* raises an exception on failure *)
TButton& ref_b = dynamic_cast<TButton&>(*Sender);
// throws an exception on failure
ShowMessage(Sender.ClassName);
ShowMessage(typeid(*Sender).name());


表中の ClassName は、宣言された変数の型に関係なく、オブジェクトの実際の型の名前を含む文字列を返す TObject メソッドです。TObject に導入されている他の RTTI メソッドは、C++ にはありません。これらはすべて public です。次に一覧を示します。

  • ClassInfo は、オブジェクト型の実行時型情報(RTTI)へのポインタを返します。
  • ClassNameIs は、オブジェクトが特定の型の一部かどうかを決定します。
  • ClassParent は、クラスのすぐ上の上位クラスの型を返します。TObject は親を持たないため、TObject の場合、ClassParent は nil を返します。is 演算子、as 演算子、および InheritsFrom メソッドに使用されます。
  • ClassType は、オブジェクトの実際の型を動的に決定します。Object Pascal の is 演算子 および as 演算子が、内部で使用します。
  • FieldAddress は、RTTI を使用して、公開フィールドのアドレスを取得します。ストリーミング システムが内部で使用します。
  • InheritsFrom は、2 つのオブジェクトの関係を決定します。Object Pascal の is 演算子 および as 演算子が、内部で使用します。
  • MethodAddress は、RTTI を使用して、メソッドのアドレスを検索します。ストリーミング システムが内部で使用します。

TObject のこれらのメソッドのうちいくつかは、主に、コンパイラやストリーミング システムが内部で使用するためのものです。

関連項目