让班级存储未知数据

Let a Class store unknown Data

本文关键字:未知数 数据 未知 存储      更新时间:2023-10-16

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

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

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

我的问题是,这个问题是否有共同的方法以及一个好的解决方案。如果我的想法不正确,并且还有另一个技术或位置可以存储我的目标(下一段)请告诉我。

可选的背景信息和上下文

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

编辑:

通过研究,我发现我想要的东西被称为数据中心在软件设计中面向数据的。现在,我有一个开始对此主题进行更多研究的起点。谢谢迈克尔·安德森(Michael Anderson)的回答,也许我会使用。

您可能想将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");

标准模板库(STL)是否 - 更具体地,使用地图 - 不适合您的需求?

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

您可以使用地图保存值:

1)一个"自定义",这是所有可能的变量/对象类型的联合。

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