повысить сериализацию коллекции stl std unique_ptrs
Я хотел бы иметь возможность сериализовать контейнер stl из std :: unique_ptrs. Это можно сделать? Кстати, все отлично работает с одиночным std :: unique_ptr. Ниже приведен код, который яm работает, а gcc выдает следующую ошибку:
use of deleted function ‘std::unique_ptr::unique_ptr(const
std::unique_ptr&) [with _Tp = MyDegrees; _Dp =
std::default_delete; std::unique_ptr =
std::unique_ptr]’
Как я могу заставить код работать?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost {
namespace serialization {
template
inline void save(
Archive & ar,
const std::unique_ptr< T > &t,
const unsigned int file_version
) {
// only the raw pointer has to be saved
const T * const tx = t.get();
//ar < tx;
ar < boost::serialization::make_nvp("px", tx);
}
template pTarget;
ar >> boost::serialization::make_nvp("px", pTarget);
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
t.release();
t = std::unique_ptr< T >(pTarget);
#else
t.reset(pTarget);
#endif
}
template
inline void serialize(
Archive & ar,
std::unique_ptr< T > &t,
const unsigned int file_version
) {
boost::serialization::split_free(ar, t, file_version);
}
} // namespace serialization
} // namespace boost
class MyDegrees
{
public:
void setDeg(int d) {
deg = d;
}
int getDeg()const {
return deg;
}
private:
friend class boost::serialization::access;
template
void serialize(Archive & ar, const unsigned int version)
//{ ar & deg; }
{
ar & boost::serialization::make_nvp("DEGS", deg);
}
int deg;
};
class gps_position
{
private:
friend class boost::serialization::access;
template
void serialize(Archive & ar, const unsigned int version)
//{ ar & degrees; }
{
ar & boost::serialization::make_nvp("DEGS2", degrees);
ar & boost::serialization::make_nvp("DEGMAP", deg_map);
}
std::unique_ptr degrees;
std::vector deg_map;
public:
gps_position(): degrees(std::unique_ptr(new MyDegrees)) {};
void setDeg(int d) {
degrees->setDeg(d);
}
int getDeg() const {
return degrees->getDeg();
}
};
int TestBasicSerialize(int, char *[])
{
int numErr = 0;
double a;
std::ofstream ofs("filename");
gps_position g;
g.setDeg(45);
std::cout