この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
型情報 [2009/01/31 15:26] 192.168.0.63 作成 |
— (現在) | ||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 型情報 ====== | ||
- | |||
- | C++ではコンパイルされてしまえば型情報はなくなります。例えばインスタンスからそのクラス名を取得することはできません。C++/CLIでは、型情報はなんでも取得できます。 | ||
- | |||
- | 最も簡単な型情報の取得はtypeidキーワードを使っておこないます。 | ||
- | <code cpp> | ||
- | using namespace System; | ||
- | int main() | ||
- | { | ||
- | Type^ t = String::typeid; | ||
- | Console::WriteLine(t->FullName); | ||
- | Console::WriteLine(t->AssemblyQualifiedName); | ||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | 型情報はクラスtypeを使ってアクセスします。 | ||
- | |||
- | インスタンスからtypeを得るには、ObjectのメソッドであるGetType()を利用します。 | ||
- | <code cpp> | ||
- | using namespace System; | ||
- | void showType(Object^ o) | ||
- | { | ||
- | Type^ t = o->GetType(); | ||
- | Console::WriteLine(t->FullName); | ||
- | Console::WriteLine(t->AssemblyQualifiedName); | ||
- | } | ||
- | ref class C { | ||
- | int a; | ||
- | }; | ||
- | int main() | ||
- | { | ||
- | String^ s = L"ABC"; | ||
- | showType(s); | ||
- | int i = 0; | ||
- | showType(i); | ||
- | C^ c = gcnew C; | ||
- | showType(c); | ||
- | array<C^>^ ar = gcnew array<C^>(10); | ||
- | showType(ar); | ||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | Type::GetType(String)を使用すれば、任意の名前からTypeを取得できます。 | ||
- | |||
- | <code cpp> | ||
- | using namespace System; | ||
- | int main() | ||
- | { | ||
- | Type^ t1 = Type::GetType("System.Console"); | ||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | Type::GetType()に渡す文字列は、AssemblyQualifiedNameというものを指定します。この場合ネームスペースの区切り文字はコロンではなくピリオドになります。 | ||
- | |||
- | Typeクラスは同じクラスに対して常に同じインスタンスを返すことを保障しています。よって==などでTypeクラスのハンドルを比較し、同じ型かどうか調べることができます。 |