使用<string>提升::序列化序列化具有 vector<unique_ptr> 成员的类
Serializing a class with member that is vector<unique_ptr<string>> with boost::serialization
有一个听起来类似的问题,但它完全不同,因为它与序列化的类的unique_ptr向量有关。 我想有一种方法来序列化作为向量的成员。
我已经尝试过但不起作用:
#include<vector>
#include<string>
#include<sstream>
#include<iostream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/unique_ptr.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/forward_list.hpp>
#include <boost/serialization/serialization.hpp>
using namespace boost::archive;
class Person {
std::vector<std::unique_ptr<std::string>> data_;
public:
Person(){
data_.emplace_back(nullptr);
data_.emplace_back(new std::string("Bjarne!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"));
}
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar,const unsigned int)
{
ar & data_;
}
public:
const std::vector<std::unique_ptr<std::string>>& data() const{
return data_;
}
};
int main() {
std::stringstream ss;
Person p;
text_oarchive oa{ss};
oa << p;
text_iarchive ia{ss};
Person read;
ia >> read;
for (const auto& ptr : read.data()) {
std::cout << *ptr;
}
}
正如@CuriouslyRecurringThoughts注释,当您想要序列化时,请避免将std::unique_ptr
s 用于哨兵无值,而是使用boost::optional
进行序列化。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 提升序列化 1:73 的向后兼容性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 如何反序列化数组?
- 如何使用提升序列化?
- 序列化多晶型接口
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?