作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试为可以附加到我的对象的可能元数据创建一个容器。我可以保证每种类型最多有一个对象附加到我的类,但附加不同类型的对象没有限制。例如,我不能将 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));
}
}
上面的代码有一个编译错误: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/
我目前正在开发一个业务应用程序,最终将由 .Net 托管公司托管。托管公司提供 1 个 MSSQL DB(2 个用户)和无限数量的 MySQL DB。购买第二个 MSSQL DB 是不可能的,因为我的
我是一名优秀的程序员,十分优秀!