gpt4 book ai didi

c++ - 如何创建一个容器来容纳每种对象?

转载 作者:太空狗 更新时间:2023-10-29 23:47:17 25 4
gpt4 key购买 nike

我尝试为可以附加到我的对象的可能元数据创建一个容器。我可以保证每种类型最多有一个对象附加到我的类,但附加不同类型的对象没有限制。例如,我不能将 wordInfo 的两个实例附加到一个对象,但是 wordInfophraseInfo 类的实例可以附加到一个对象同时。到目前为止,这是我为完成它所做的工作。

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));
}
}

上面的代码有一个编译错误:less operator was not defined for std::type_info 所以我专门为 std::type_info 定义了一些 less 类并传递给它作为 map 类的第三个模板参数,如下所示:

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 有私有(private)构造函数甚至私有(private)复制构造函数,所以我什至不能从中派生一些类.知道如何解决这个问题吗?或任何其他可能的方式来创建我的 object 类?

最佳答案

很抱歉回答了一个古老的问题,但这是我试图弄明白时谷歌上的第一个结果。您应该使用 std::type_index 包装类作为映射的键,而不是创建包装类。

关于c++ - 如何创建一个容器来容纳每种对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com