C++ 在C+中序列化不同的数据类型+;

C++ 在C+中序列化不同的数据类型+;,c++,serialization,types,C++,Serialization,Types,我有一个模板化容器类,它在内部将数据存储在以下静态数据变量中: template<typename T> class Container { // ... Access methods std::map<unsigned int, std::map<unsigned int, boost::shared_ptr<T>> }; 应生成一个文件,其中包含子客户端的ID和容器类中的关联数据。既然可以在容器类中使用的类型几乎可以是任何类型,并且新类型一

我有一个模板化容器类,它在内部将数据存储在以下静态数据变量中:

template<typename T>
class Container {
  // ... Access methods
  std::map<unsigned int, std::map<unsigned int, boost::shared_ptr<T>>
};
应生成一个文件,其中包含子客户端的ID和容器类中的关联数据。既然可以在容器类中使用的类型几乎可以是任何类型,并且新类型一直在从代码库中添加和删除,那么如何序列化和反序列化这些数据呢? 在我看来,问题在于,数据类型没有唯一的ID,这些ID可以用来标识文件中属于包含特定数据的容器的部分,也不能以任何明确的方式排序(或者可以吗?)


如何在尽可能少地更改容器所用的数据类型的情况下解决此问题。

您已经描述了什么可以完美地完成此任务。不需要对容器或其数据类型进行任何更改。该库内置了对序列化STL容器和
boost::shared_ptr
的支持。尽管您可能需要为
T
添加序列化方法,具体取决于它是什么。

对于容器本身,您可以使用
std::for_each
,从而迭代整个过程,但每个单独的数据实例(类型为
T
)都是如此,您必须实现一个序列化方法,该方法将从
为每个
调用的函数调用

该函数可能必须使用
dynamic\u cast
操作符,才能从指针中取出实际对象,并确保其有效

Client c;
/* Some operations on c */
c.Serialize(output);