如何以模块化方式保存和加载C++应用程序状态

ksh*_*har 2 c++ session resume state save

我有一个分布式C++应用程序,它由分布在2台机器上的4个进程组成.其中一个应用程序用作其余应用程序的"控制中心".

我希望能够将当前状态保存到文件并稍后再次加载.究竟什么是"状态"由系统中的每个模块单独定义.保存时,模块状态应合并为一个文件.加载时,每个模块都应该从文件中读取状态数据.

必须将状态保存到人类可读的文本文件中,因为它将由一些用户编辑.因此二进制文件格式不是一种选择.此外,首选标准文件格式,如XML或YAML.

您如何建议实现我刚才描述的状态保存/加载的基本框架?我更喜欢执行此任务所需的最小数据序列化工作.此外,该框架应该允许轻松添加更多数据以便将来保存.

Tim*_*imW 7

看一下boost.Serialize lib.对于(非)流对象到(xml)文件,这是一个非常好的库.

而不是编写加载和保存功能,您的类只需要编写一个序列化函数,这个函数将双向工作.

class X
{
   friend class boost::serialization::access;
   template<class Archive>
   void serialize(Archive & ar, const unsigned int version)
   {
       ar & make_nvp("degrees(=xml_tagname)", degrees);
       ar & make_nvp("minutes(=xml_tagname)", minutes);;
       ar & BOOST_SERIALIZATION_NVP(seconds);  // =auto xml tag
   }
}
Run Code Online (Sandbox Code Playgroud)