2012-04-20 30 views
2

我需要將類中的對象存儲在類中。
這將是這樣的:存儲有關對象類型的信息

template<class T> 
class box 
{ 
private: 

    type_info type; 
    T data; 
} 

我之所以需要存儲的類型信息是複雜的解釋,反正我也知道這是不可能性在C++中。
當我嘗試編譯等的指示:

type=typeid(data); 

我得到一個語法錯誤:
沒有匹配的初始化「的std :: TYPE_INFO」
所以好像TYPE_INFO具有不與構造沒有參數。那麼在某種程度上,可能會將對象的類型記憶成數據?

回答

7

所屬類別是不可複製 - 其構造函數和賦值運算符是私有的(在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

在一些系統上,typeid的(X)。名稱你東西沿着這些路線後可能是()對於bools是'b',對doubles是'd',對於std :: strings是's',對於unsigned int是'h'等等。所以你需要對輸出進行一些解密。 – 01100110 2012-04-20 13:07:42

相關問題