我试图序列化具有 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序列化。有类似的问题,但有正确的答案how do i serialize list variable of type <boost::shared_ptr<void *>>
答案 0 :(得分:1)
你想要
std::list<boost::shared_ptr<SomeStruct>> lss ;
不是std::list<boost::shared_ptr<SomeStruct*>>
#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;
}