повысить сериализацию коллекции 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

Ответы на вопрос(1)

Ваш ответ на вопрос