让一个类存储未知数据

时间:2012-10-17 05:04:47

标签: c++ list class types member

关于在类中存储未知数据的问题

如何在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的回答,我可能会用它。

2 个答案:

答案 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)指向实际对象/变量的指针。