type_info Class
type_info クラスは、コンパイラによってプログラム内に生成される型情報を記述します。 このクラスのオブジェクトは、実質的には型の名前へのポインターを格納します。 type_info クラスはまた、2 つの型の等価性または照合順序の比較に適したエンコード値を格納します。 型のエンコーディング規則と照合順序については指定されていないため、プログラムによって異なる場合があります。
type_info クラスを使用するには、<typeinfo> ヘッダー ファイルを含める必要があります。 type_info クラスのインターフェイスは、次のとおりです。
class type_info {
public:
virtual ~type_info();
size_t hash_code() const
_CRTIMP_PURE bool operator==(const type_info& rhs) const;
_CRTIMP_PURE bool operator!=(const type_info& rhs) const;
_CRTIMP_PURE int before(const type_info& rhs) const;
_CRTIMP_PURE const char* name() const;
_CRTIMP_PURE const char* raw_name() const;
};
type_info クラスに存在するのがプライベート コピー コンストラクターのみであるため、このクラスのオブジェクトを直接インスタンス化することはできません。 type_info (一時) オブジェクトを構築する唯一の方法は、typeid 演算子を使用することです。 代入演算子もプライベートであるため、type_info クラスのオブジェクトのコピーや代入を行うことはできません。
type_info::hash_code は、typeinfo 型の値をインデックス値の分布にマッピングするために適したハッシュ関数を定義します。
== 演算子と != 演算子は、それぞれ他の type_info オブジェクトとの等価性または非等価性についての比較に使用できます。
型の照合順序と継承関係には関連性はありません。 型の照合順序は、type_info::before メンバー関数を使用して決定します。 type_info::before が異なるプログラムで同じ結果が得られる保証はなく、同じプログラムの異なる実行でさえ結果が異なる場合があります。 この点で、type_info::before は、(&) 演算子のアドレスに似ています。
type_info::name メンバー関数は、人間が判読可能な形式での型名を表す、null で終わる文字列への const char* を返します。 ポイントされたメモリはキャッシュされ、直接解放されることはありません。
type_info::raw_name メンバー関数は、修飾された形式でのオブジェクト型名を表す、null で終わる文字列への const char* を返します。 実際、名前は保存領域を節約するために、修飾された形式で格納されます。 したがって、この名前を使用した場合、名前の修飾を外す必要がないため type_info::name よりも迅速に処理されます。 type_info::raw_name 関数から返された文字列は比較演算では使用できますが、読み取り可能ではありません。 人間が判読可能な文字列が必要な場合は、type_info::name 関数を使用します。
型情報は、/GR (ランタイム型情報を有効にする) コンパイラ オプションが指定されている場合のみ生成されます。