我試圖創建一個可以附加到我的對象的可用元數據的容器。我可以保證在我的課程中最多隻能有一個對象,但是不能附加不同類型的對象。例如,我無法將wordInfo
的兩個實例附加到對象,但可以同時將wordInfo
和phraseInfo
類的實例附加到對象。這是我迄今爲止完成的工作。如何創建一個容器,每個對象都有一個對象?
class object
{
std::map <std::type_info, object*> mMetaData;
public:
inline void attachMetaData(object* pData)
{
mMetaData[typeid(*pData)] = pData;
}
template <class T> inline std::enableif<std::is_base_of<object,T>::value, T*>::type getMetaData()
{
if (mMetaData.find(typeid(T)) == mMetaData.end())
return NULL;
else
return mMetaData[typeid(T)];
}
template <class T> inline std::enableif<std::is_base_of<object,T>::value, void>::type detachMetaData()
{
mMetaData.erase(typeid(T));
}
}
上面的代碼有一個編譯錯誤:少操作者沒有爲std::type_info
定義,因此我定義一些不太類專門爲std::type_info
,並將其傳遞作爲這樣地圖類的第三模板參數:
struct typeinfoless
{
bool operator()(std::type_info& left, std::type_info& right)
{
return left.hash() < right.hash();
}
}
std::map <std::type_info, object*, typeinfoless> mMetaData;
但後來我遇到了另一個我不知道如何解決的錯誤,std::type_info
有私有構造函數,甚至私有拷貝構造函數,所以我甚至不能從它派生出一些類。任何想法如何解決這個問題?或任何其他可能的方式來創建我的object
類?
可能的[OneOfAType容器的重複 - 在容器中存儲一個給定類型的每一個 - 我在這裏基地嗎?](http://stackoverflow.com/questions/3221501/oneofatype-container-storing-one每一個給定類型在一個容器,我 - io) – Cubbi
也,討論http://stackoverflow.com/questions/3552135/will-c0x-provide-hashing-functions-for -stdtype-info可能更加合適 – Cubbi
@cubbi:似乎不是,我已經得到了散列函數,這是你標記的那個主要問題。我不確定是VC++實現還是其他類型的函數,但我可以很容易地使用它,我的問題是創建一個map類作爲鍵,因爲我得到了一個錯誤type_info :: type_info無法訪問。 – Ali1S232