提升包含互斥成员

时间:2016-11-01 13:43:20

标签: c++ serialization boost mutex

我正在使用一个库来定义:a)a" Map"上课和b)a" Point"类。这两个类的结构如下:

class Point
{
 public:
      Point(const cv::Mat a);
      std::map<cv::Mat*,int> observations;
      .
      .
      .
      std::mutex mMutex;
 }

class Map
{
 public:
      Map();
      std::set<Point*> mapPoints;
      .
      .
      .
      std::mutex mMutex;
 }

程序保留地图的单个实例。我希望能够在应用程序初始化/终止期间使用Boost序列化加载/保存。显然,互斥对象无法序列化,所以我&#39;在反序列化/加载实例后,必须手动分配它们。

为此,我已经为Point定义了一个默认构造函数,并且我已经覆盖了serialize():

 namespace boost {
 namespace serialization {
 template<class Archive>
          void serialize(Archive & ar, Point & mapPoint, const unsigned int version)
 {
     ar & mapPoint.observations;
     ... //I do NOT load mMutex
 }


 namespace boost {
 namespace serialization {
 template<class Archive>
          void serialize(Archive & ar, Map & map, const unsigned int version)
 {
     ar & map.mapPoints;
     ... //I do NOT load mMutex
 }

我为Point定义的默认构造函数实际上什么也没做,因为不应该发生成员初始化(所有值都应该从存档中加载)。如果动态分配互斥锁,我会在默认构造函数中实例化它。

问题在于我无法用动态分配的互斥锁替换堆栈分配的互斥锁,因为这需要对库进行大量更改。有什么方法可以解决这个问题,还是我错过/误解了什么?

此外,我是否正确不希望构造函数在反序列化时执行任何操作?

0 个答案:

没有答案