我正在使用一个库来定义: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定义的默认构造函数实际上什么也没做,因为不应该发生成员初始化(所有值都应该从存档中加载)。如果动态分配互斥锁,我会在默认构造函数中实例化它。
问题在于我无法用动态分配的互斥锁替换堆栈分配的互斥锁,因为这需要对库进行大量更改。有什么方法可以解决这个问题,还是我错过/误解了什么?
此外,我是否正确不希望构造函数在反序列化时执行任何操作?