如何在C ++中提供一个能够存储任何类型的任意数量变量的类?从课程的内部和外部,我想阅读,添加,修改和删除这些数据。
所以我要找的可能是数据类型可能不同的列表。
Class Object();
Object->Storage->Create("position", "float"); // create
Object->Storage->Write("position", 42.0f); // write
int Result = Object->Storage->Read("position"); // read
Object->Storage->Delete("position"); // delete
我的问题是,对于这个问题是否有一个共同的方法,以及一个好的解决方案是什么。如果我的想法不正确,并且有其他技术或地方存储我的目标(下一段)的数据,请告诉我。
这种需求背后的原因是我正在编写一种基于组件的游戏引擎。有组件和系统。系统可以是标题菜单或世界级别,我可以根据需要添加任意数量的组件。每次游戏时,系统都会在其所有组件上调用指定的方法。组件例如是物理,地形,绘图,角色,声音......所提到的未知数据结构是组件应该能够存储在其系统中的。组件几乎是静态的,其状态取决于它使用的存储。此存储系统(与事件管理器一起)用于组件之间的通信。
通过研究,我发现我想要的东西在软件设计中被称为以数据为中心或 Data Oriented 。现在我有一个关于这个主题的更多研究的起点。谢谢Michael Anderson的回答,我可能会用它。
答案 0 :(得分:3)
你可能想用boost::any
来做这件事。
您的代码如下所示:
std::map<std::string,boost::any> object;
object["position"] = 42.0f;
//This will throw if the type is wrong
int Result = boost::any_cast<float>(object["position"]);
object.erase("position");
答案 1 :(得分:1)
标准模板库(STL) - 更具体地说,是否使用地图 - 不能满足您的需求?
http://en.cppreference.com/w/cpp/container/map
您可以使用地图来保存以下值:
1)“CustomObject”,它是所有可能的变量/对象类型的并集。
2)指向实际对象/变量的指针。