提升嵌套结构的序列化不起作用

编程入门 行业动态 更新时间:2024-10-26 20:21:29
本文介绍了提升嵌套结构的序列化不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试序列化包含两个或更多其他类型的turct的结构.但是似乎序列化不起作用.下面是示例代码:

I'm trying to serialize a struct which contains two or more other types of sturct. But it seems that serialization does not work. Below is sampel code :

//SimpleData.hpp

//SimpleData.hpp

#include <boost/serialization/access.hpp> #include <boost/serialization/base_object.hpp> #include <boost/serialization/optional.hpp> #include <boost/serialization/map.hpp> #include <boost/serialization/shared_ptr.hpp> namespace A { Struct Name { std::string firstname; std::string lastname; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & firstname; ar & lastname; } }; Struct Address { std::string street; std::string city; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & street; ar & city; } } Struct FullData { public : FullData(); FullData(const parameter_strings & parms); virtual ~FullData(); boost::optional<Name> nameinfo; // instance of struct Name boost::optional<Address> addressinfo; // instance of struct Address std::string country; std::int pincode; private : friend class boost::serialization::access; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & nameinfo; // are these enough to take of serialization of Name and ar & addressinfo; // Address ar & country;; ar & pincode; } }; }

//SimpleData.cpp

//SimpleData.cpp

#include "SimpleData.hpp" FullData::FullData() { } FullData::~FullData() { } FullData::~FullData(const parameter_strings & parms): Detail(parms) { // impelmentation } BOOST_CLASS_EXPORT_IMPLEMENT(FullData); BOOST_CLASS_IMPLEMENTATION(FullData),boost::serialization::object_serializable); BOOST_CLASS_TRACKING(FullData),boost::serialization::track_never);

我不确定上述代码是否可以正确序列化.上面的代码有什么问题. 我是否还需要添加以下代码来对SimpleData.cpp文件中的Name和Address结构进行序列化

I'm not sure if above code would serialize properly or not. Whats wrong with above code. Do i need to add below code also for serialization of Name and Address struct in SimpleData.cpp file

BOOST_CLASS_EXPORT_IMPLEMENT(Name); BOOST_CLASS_IMPLEMENTATION(name,boost::serialization::object_serializable); BOOST_CLASS_TRACKING(Name,boost::serialization::track_never); BOOST_CLASS_EXPORT_IMPLEMENT(Address); BOOST_CLASS_IMPLEMENTATION(Address,boost::serialization::object_serializable); BOOST_CLASS_TRACKING(Address,boost::serialization::track_never);

推荐答案

我不知道问题是什么.我/do/知道代码到处都是错误.

I don't know what the question was. I /do/ know that the code was littered with errors.

我修复了这些问题,然后发现:工作效率:

I fixed those, and behold: workiness:

int main() { A::FullData data({ { "key1", "value1" }, { "key2" , "value2" } }); data.nameinfo = A::Name { "firstname", "lastname" }; data.addressinfo = A::Address { "street", "city" }; data.pincode = 99977; data.country = "Gibraltar"; boost::archive::text_oarchive oa(std::cout); oa << data; }

打印

22 serialization::archive 10 0 0 1 0 0 0 9 firstname 8 lastname 0 0 1 0 0 0 6 street 4 city 9 Gibraltar 99977 0 0 2 0 0 0 4 key1 6 value1 4 key2 6 value2

查看 在Coliru上直播

See it Live On Coliru

#include <boost/serialization/access.hpp> #include <boost/serialization/base_object.hpp> #include <boost/serialization/optional.hpp> #include <boost/serialization/map.hpp> #include <boost/serialization/shared_ptr.hpp> namespace A { typedef std::map<std::string, std::string> parameter_strings; struct Name { std::string firstname; std::string lastname; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & firstname; ar & lastname; } }; struct Address { std::string street; std::string city; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & street; ar & city; } }; struct FullData { FullData(); FullData(const parameter_strings & parms); virtual ~FullData(); boost::optional<Name> nameinfo; // instance of struct Name boost::optional<Address> addressinfo; // instance of struct Address parameter_strings detail; std::string country; int pincode; private : friend class boost::serialization::access; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & nameinfo; // are these enough to take of serialization of Name and ar & addressinfo; // Address ar & country; ar & pincode; ar & detail; } }; }

SimpleData.cpp

#include "SimpleData.hpp" #include <boost/serialization/export.hpp> namespace A { FullData::FullData() { } FullData::~FullData() { } FullData::FullData(const parameter_strings & parms): detail(parms) { // impelmentation } } #include <boost/archive/text_oarchive.hpp> BOOST_CLASS_EXPORT_IMPLEMENT(A::FullData) BOOST_CLASS_IMPLEMENTATION(A::FullData , boost::serialization::object_serializable) BOOST_CLASS_TRACKING(A::FullData , boost::serialization::track_never) int main() { A::FullData data({ { "key1", "value1" }, { "key2" , "value2" } }); data.nameinfo = A::Name { "firstname", "lastname" }; data.addressinfo = A::Address { "street", "city" }; data.pincode = 99977; data.country = "Gibraltar"; boost::archive::text_oarchive oa(std::cout); oa << data; }

更多推荐

提升嵌套结构的序列化不起作用

本文发布于:2023-11-06 13:21:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1563801.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   不起作用   结构   序列化

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!