在单个结构下管理MultiType对象

时间:2014-09-26 12:56:53

标签: c++ templates types casting data-management

我正在尝试使用C ++中的数据管理器框架,它会定期(当调用Manager :: checkout()时)保存当前状态。这将是允许应用程序在系统错误后重新启动的系统的基础。

我们的想法是拥有一个名为Manager的单例类,它将所有变量保存在其中,用户只需通过执行

创建一个新的托管变量
int& i = Manager::get().make<int>("variable_id");
double& e = Manager::get().make<double>("other_variable_id");

我的问题是如何从经理的角度管理变量。

我的第一个想法是构建一个由变量类型模板化的对象类,它将保存变量以及变量的序列化/管理方法。

如果我有很多那些

Object<char>, Object<double>, Object<std::vector<int>>

全部转为

Object<void>

并存储在

std::map<std::string, Object<void>>

我不知道如何与这些对象进行交互(因为Manager不知道底层类型)。我不能将类型存储为Object的元素(遗憾的是类型不是C ++中的对象)并且我不想使用枚举,以便不对除了序列化部分之外可以存储和不能存储的内容施加限制。< / p>

知道我该怎么做吗?

1 个答案:

答案 0 :(得分:0)

除了&#34;单身数据管理器&#34;听起来像是一个糟糕的主意(&#34;数据管理器&#34;可能是我永远>想象的类的最差名称),你想要的那种类型的擦除很大程度上基于一个重要的条件:

我事先知道所有类型吗?

  • 如果您知道,请使用variant(Boost有实施)和建议的访客模式。

  • 如果您不这样做,请查看any

无论哪种方式,基本思想是使用表示其运行时类型来注释类型擦除指针。 C ++就是这样做的(我们称之为RTTI),但在您的情况下,手动执行此操作可能更好。