2012-04-20 18 views
2

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

template<class T> 
class box 
{ 
private: 

    type_info type; 
    T data; 
} 

私は型情報を格納する必要がある理由は、これはC++でpossibileであれば、とにかく、私は知っているだろう、説明するのは複雑です。
私のような命令をコンパイルしようとすると:

type=typeid(data); 

私は構文エラーを取得:
の初期化に該当「のstd :: TYPE_INFO」
TYPE_INFOを持つコンストラクタをしていないようなので、それはそうどんな意味でも、オブジェクトの型をデータに覚えることは可能でしょうか?

答えて

7

のTypeInfoはコピー不可である - そのコンストラクタと代入演算子はプライベートです(C++ 11には、彼らは削除フラグが付けられます)。それはクラス/オブジェクトの名前を取り、それを格納することが可能です

template<class T> 
class box 
{ 
public: 
    box() : data(), type(typeid(data)) 
    { 
    } 
private: 
    T data; 
    const type_info& type; 
}; 
2

あなたはtypeidの式によって返されたオブジェクトからポインタを取ることができます:

const std::type_info* const type = &typeid(data); 
0

:一部のシステムで

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

+0

、型ID(x)は.nameのあなたは、これらの線に沿って何かした後、おそらくです()はboolの場合はb、倍精度の場合はd、std :: stringsの場合は's '、unsigned intの場合は' h 'などです。したがって、その出力をいくらか解読する必要があります。 – 01100110

関連する問題