如何使用boost序列化shared_ptr指针类型的列表

how to serialize list of type shared_ptr pointer type using boost serialization

本文关键字:指针 类型 列表 ptr 何使用 boost 序列化 shared      更新时间:2023-10-16

我正在尝试序列化类的成员变量类型为std::list> lss

#include <boost/serialization/optional.hpp> 
#include <boost/serialization/map.hpp> 
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/list.hpp>
struct SomeStruct
{
     int x;
     double y;
     private:
      friend class boost::serialization::access;
      template<class Archive>
      void serialize(Archive &at, const unsigned int version)
      {
         at & x; 
         at & y;
      }
};
class BuildTest
{
    std::list<boost::shared_ptr<SomeStruct *>> lss ; 
    std::string name;
    private:
      friend class boost::serialization::access;
      template<class Archive>
      void serialize(Archive &at, const unsigned int version)
      {
         at & lss;  // is this sufficient to serialize lss ?
         at & name;
      } 
}
我已经添加了boost序列化所需的所有头文件。有一个类似的问题,但有正确的答案,我如何序列化类型为>

你想

std::list<boost::shared_ptr<SomeStruct>> lss ; 

std::list<boost::shared_ptr<SomeStruct*>>

查看Live On Coliru

#include <boost/serialization/optional.hpp>
#include <boost/serialization/map.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/list.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/make_shared.hpp>
struct SomeStruct {
    int x;
    double y;
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive &at, const unsigned int version) {
        at & x;
        at & y;
    }
};
class BuildTest {
  public:
    std::list<boost::shared_ptr<SomeStruct>> lss ;
    std::string name;
  private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive &at, const unsigned int version) {
        at & lss;  // is this sufficient to serialize lss ?
        at & name;
    }
};
int main() {
    BuildTest bt;
    bt.name = "Let's try this";
    bt.lss = { boost::make_shared<SomeStruct>(), boost::make_shared<SomeStruct>() };
    boost::archive::text_oarchive oa(std::cout);
    oa << bt;
}
相关文章: