相关文章推荐
阳刚的小狗  ·  南亚学系·  9 月前    · 
听话的感冒药  ·  “对华文明冲突论”的背后是冷战思维和种族主义 ...·  9 月前    · 
迷茫的番茄  ·  【反诈骗宣传】“国家反诈中心”App上线!守 ...·  11 月前    · 
纯真的皮带  ·  骨髓捐献联络员的日常:“别再打我儿子主意,我 ...·  1 年前    · 
安静的海龟  ·  Anyway.FM 设计杂谈| 小宇宙- ...·  1 年前    · 
小百科  ›  如何使用std::shared_ptr进行boost::序列化工作?开发者社区
坚强的蘑菇
11 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 如何使用std::shared_ptr进行boost::序列化工作?

Stack Overflow用户
提问于 2013-09-28 06:49:41
EN

这个问题一直是 asked here 和其他一些地方,但答案似乎并没有真正解决最新的Boost库。

为了说明这个问题,假设我们要序列化一个包含共享指针( std::shared_ptr )的类,以及一个静态 load 函数,它将从一个文件构建这个类,以及一个将实例存储到一个文件中的 save 函数:

代码语言: javascript
复制
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <fstream>
#include <memory>
#include <vector>
class A
public:
    std::shared_ptr<int> v;
    void A::Save(char * const filename);
    static A * const Load(char * const filename);
        //////////////////////////////////
        // Boost Serialization:
    private:
        friend class boost::serialization::access;
        template<class Archive> void serialize(Archive & ar, const unsigned int file_version) 
            ar & v;
// save the world to a file:
void A::Save(char * const filename)
    // create and open a character archive for output
    std::ofstream ofs(filename);
    // save data to archive
        boost::archive::text_oarchive oa(ofs);
        // write the pointer to file
        oa << this;
// load world from file
A * const A::Load(char * const filename)
    A * a;
    // create and open an archive for input
    std::ifstream ifs(filename);
    boost::archive::text_iarchive ia(ifs);
    // read class pointer from archive
    ia >> a;
    return a;
 
推荐文章
阳刚的小狗  ·  南亚学系
9 月前
听话的感冒药  ·  “对华文明冲突论”的背后是冷战思维和种族主义- 求是网
9 月前
迷茫的番茄  ·  【反诈骗宣传】“国家反诈中心”App上线!守护你的“钱袋子”
11 月前
纯真的皮带  ·  骨髓捐献联络员的日常:“别再打我儿子主意,我跟你没完!”
1 年前
安静的海龟  ·  Anyway.FM 设计杂谈| 小宇宙- 听播客,上小宇宙
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号