2

オブジェクトの型をクラスに格納する必要があります。
これは次のようになります。

template<class T>
class box
{
private:

    type_info type;
    T data;
}

型情報を格納する必要がある理由は説明が複雑ですが、とにかく、これがC++で可能かどうかはわかります。
次のような命令をコンパイルしようとすると、次のようになります。

type=typeid(data);

構文エラーが発生します:
'std :: type_info'の初期化に一致しません
したがって、type_infoには引数のないコンストラクターがないようです。オブジェクトのタイプをデータに記憶することは、何らかの方法で可能ですか?

4

3 に答える 3

7

typeinfoはコピーできません-そのコンストラクターと代入演算子はプライベートです(C ++ 11では削除済みのフラグが付けられています)。あなたはおそらくこれらの線に沿って何かを求めています:

template<class T>
class box
{
public:
    box() : data(), type(typeid(data))
    {
    }
private:
    T data;
    const type_info& type;
};
于 2012-04-20T12:18:02.677 に答える
2

typeid式によって返されるオブジェクトからポインタを取得できます。

const std::type_info* const type = &typeid( data );
于 2012-04-20T12:17:45.840 に答える
0

クラス/オブジェクトの名前を取得して保存することができます。

std::string name = typeid(data).name();

于 2012-04-20T12:21:11.337 に答える