1

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

如何在 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

如何做到这一点或为什么以另一种方式做到这一点

我的问题是是否有解决这个问题的通用方法以及什么是好的解决方案。如果我的想法不正确,并且有另一种技术或地方可以为我的目标存储数据(下一段) ,请告诉我。

可选的背景信息和背景

这种需求背后的原因是我正在编写一种基于组件的游戏引擎。有组件和系统。系统可以是标题菜单或世界级别,我可以根据需要向其中添加任意数量的组件。每次游戏滴答,系统都会在其所有组件上调用一个指定的方法。组件是例如物理、地形、绘图、字符、声音…… 所提到的未知数据结构是组件应该能够存储在其系统中的内容。组件几乎是静态的,它的状态取决于它使用的存储。此存储系统(与事件管理器一起)用于在组件之间进行通信。

编辑:

通过研究,我发现我想要的在软件设计中被称为以数据为中心面向数据。现在我有了一个起点,可以对这个话题进行更多的研究。谢谢迈克尔安德森的回答,我可能会使用它。

4

2 回答 2

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");
于 2012-10-17T05:17:39.740 回答
1

标准模板库 (STL) - 更具体地说,使用地图 - 不能满足您的需求吗?

http://en.cppreference.com/w/cpp/container/map

您可以使用地图来保存以下任一值:

1) 一个“CustomObject”,它是所有可能的变量/对象类型的联合。

2) 指向实际对象/变量的指针。

于 2012-10-17T05:07:44.797 回答