C++ 序列化具有向量成员的类<;独特的_ptr<;字符串>&燃气轮机;使用boost::序列化

C++ 序列化具有向量成员的类<;独特的_ptr<;字符串>&燃气轮机;使用boost::序列化,c++,boost,boost-serialization,C++,Boost,Boost Serialization,有一个类似的函数,但它完全不同,因为它与序列化的类的unique_ptr的向量有关。 我想有一种方法来序列化作为向量的成员 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间boost::archive; 班主任{ std::矢量数据; 公众: 人(){ 数据放回(空PTR); 数据放回(新的标准::字符串(“Bjarne!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!”); } 私人: 好友类boost:

有一个类似的函数,但它完全不同,因为它与序列化的类的unique_ptr的向量有关。 我想有一种方法来序列化作为向量的成员

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间boost::archive;
班主任{
std::矢量数据;
公众:
人(){
数据放回(空PTR);
数据放回(新的标准::字符串(“Bjarne!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!”);
}
私人:
好友类boost::serialization::access;
模板
无效序列化(存档和ar,常量unsigned int)
{
应收账款和数据;
}
公众:
常量std::向量和数据()常量{
返回数据;
}
};
int main(){
std::stringstream-ss;
人p;
文本_oarchiveoa{ss};
oa>阅读;
for(const auto&ptr:read.data()){

std::cout作为@CuriouslyRecurringThroughts注释,当您要序列化sentinel no值时,避免使用
std::unique_ptr
s,而是使用to。

字符串指针向量似乎没有意义。为什么不只是字符串向量?为什么需要空指针?这是一个例子,它可能是一个指针只移动UDT
std::unique_ptr
也是只移动,所以这不是参数…仍然可以接受,因为多态类型需要指针(指针与值的问题,空指针是另一回事!)。您是对的,更好的示例是指向没有有效移动的类型的指针,如大型std::array或某些古老的第三方代码类。最好的示例是多态类型,因为您的操作与存储指针没有任何区别,否则您将遭受对象切片的痛苦;)
#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; 
    }
}