次の方法で共有


typeid (C++ コンポーネント拡張)

オブジェクトの型を示す値を取得します。

All Runtimes

kwd9abya.collapse_all(ja-jp,VS.110).gifSyntax

T::typeid

kwd9abya.collapse_all(ja-jp,VS.110).gifParameters

  • T
    型の名前。

Windows ランタイム

kwd9abya.collapse_all(ja-jp,VS.110).gifSyntax

Platform::Type^ type = T::typeid;

kwd9abya.collapse_all(ja-jp,VS.110).gifParameters

  • T
    A type name.

kwd9abya.collapse_all(ja-jp,VS.110).gif解説

C++/CX では、typeid はランタイムの型情報から構築された Platform::Type を返します。

kwd9abya.collapse_all(ja-jp,VS.110).gif要件

Compiler option: /ZW

共通言語ランタイム

Syntax

type::typeid

Parameters

  • type
    System::Type オブジェクトに適用する型 (抽象宣言子) の名前。

解説

typeid を使用して、コンパイル時に型の Type を取得します。

typeid の機能は、実行時に GetType または GetType を使用して型の System::Type を取得することに似ています。ただし、typeid には型名をパラメーターとしてのみ指定できます。型のインスタンスを使用して、その System::Type 名を取得するには、GetType を使用します。

typeid はコンパイル時に型名 (型) を評価できる必要がありますが、GetType は実行時に返す型を評価します。

typeid には、ネイティブ型の名前またはネイティブ型の名前の共通言語ランタイム エイリアスを指定できます。詳細については、「C++ ネイティブ型と等価な .NET Framework ネイティブ型 (C++/CLI)」を参照してください。

typeid ではネイティブ型も扱えますが、その場合でも System::Type を返します。type_info 構造体を取得するには、typeid 演算子を使用します。

typeid は、以前の /clr 構文における __typeof に相当するものです。

kwd9abya.collapse_all(ja-jp,VS.110).gif要件

Compiler option: /clr

kwd9abya.collapse_all(ja-jp,VS.110).gif

Example

次の例では、typeid のキーワードと GetType() メンバーを比較します。

// keyword__typeid.cpp
// compile with: /clr
using namespace System;

ref struct G {
   int i;
};

int main() {
   G ^ pG = gcnew G;
   Type ^ pType = pG->GetType();
   Type ^ pType2 = G::typeid;

   if (pType == pType2)
      Console::WriteLine("typeid and GetType returned the same System::Type");
   Console::WriteLine(G::typeid);

   typedef float* FloatPtr;
   Console::WriteLine(FloatPtr::typeid);
}

出力

  
  

Example

次の例では、System::Type 型の変数を使用して型の属性を取得できることを示しています。この例を見るとわかるように、一部の型では、typeid を使用するために typedef を作成する必要があります。

// keyword__typeid_2.cpp
// compile with: /clr
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;

typedef int ^ handle_to_int;
typedef int * pointer_to_int;

public ref class MyClass {};

class MyClass2 {};

[attribute(AttributeTargets::All)]
ref class AtClass {
public:
   AtClass(Type ^) {
      Console::WriteLine("in AtClass Type ^ constructor");
   }
};

[attribute(AttributeTargets::All)]
ref class AtClass2 {
public:
   AtClass2() {
      Console::WriteLine("in AtClass2 constructor");
   }
};

// Apply the AtClass and AtClass2 attributes to class B
[AtClass(MyClass::typeid), AtClass2]   
[AttributeUsage(AttributeTargets::All)]
ref class B : Attribute {};

int main() {
   Type ^ MyType = B::typeid;

   Console::WriteLine(MyType->IsClass);
   
   array<Object^>^ MyArray = MyType -> GetCustomAttributes(true);
   for (int i = 0 ; i < MyArray->Length ; i++ )
      Console::WriteLine(MyArray[i]);

   if (int::typeid != pointer_to_int::typeid)
      Console::WriteLine("int::typeid != pointer_to_int::typeid, as expected");

   if (int::typeid == handle_to_int::typeid)
      Console::WriteLine("int::typeid == handle_to_int::typeid, as expected");
}

出力

  
  
  
  
  
  
  
  

参照

概念

ランタイム プラットフォームのコンポーネントの拡張機能