清泛IT社区App Inventor 2 中文社区

搜索

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.72

Aia Store .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

开通会员送SVIPApp Inventor 2 拓展有奖征文 VIP会员享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档中文教程IoT专题

查看: 1214|回复: 0
打印 上一主题 下一主题

c++ boost库 序列化与反序列化

  • TA的每日心情
    开心
    2024-02-17 18:16
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    546

    主题

    715

    帖子

    1万

    积分

    管理员

    这里没有广告...

    Rank: 9Rank: 9Rank: 9

    积分
    10709
    QQ
    跳转到指定楼层
    楼主
    发表于 2016-02-23 17:00:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1、定义类/结构体序列化函数:
    template <typename Archive>
    void serialize(Archive& ar, TOrder & obj, const unsigned int version = SERIALIZATION_VERSION)
    {
            ar & BOOST_SERIALIZATION_NVP(obj.Param)
                    & BOOST_SERIALIZATION_NVP(obj.OrderRef)
                    & BOOST_SERIALIZATION_NVP(obj.UserID);
    }
    BOOST_SERIALIZATION_SHARED_PTR(TStopProfitOrder);

    2、save、load函数:
    1. #ifndef STRUCT_SAVE_LOAD_H_
    2. #define STRUCT_SAVE_LOAD_H_
    3. //
    4. #include <string>
    5. #include <fstream>
    6. //
    7. #include "boost/archive/text_iarchive.hpp"
    8. #include "boost/archive/text_oarchive.hpp"
    9. #include "boost/archive/xml_iarchive.hpp"
    10. #include "boost/archive/xml_oarchive.hpp"
    11. #include "boost/serialization/base_object.hpp"
    12. #include "boost/serialization/list.hpp"
    13. #include "boost/serialization/map.hpp"
    14. #include "boost/serialization/vector.hpp"
    15. #include "boost/serialization/set.hpp"
    16. #include "boost/serialization/string.hpp"
    17. #include "boost/serialization/shared_ptr.hpp"
    18. //
    19. const unsigned int SERIALIZATION_VERSION = 1;
    20. //保存结构体数据
    21. template<typename TemplateStruct> int save(const TemplateStruct & templateStruct,const std::string &strFileName,const unsigned int version = SERIALIZATION_VERSION)
    22. {
    23.         try
    24.         {
    25.                 std::ofstream ofs(strFileName.c_str());
    26.                 boost::archive::xml_oarchive oa(ofs);
    27.                 oa << BOOST_SERIALIZATION_NVP(templateStruct);
    28.         }
    29.         catch (...)
    30.         {
    31.                 return -1;
    32.         }
    33.         return 0;
    34. }
    35. //从文件加载结构体数据
    36. template<typename TemplateStruct> int load(TemplateStruct & templateStruct,const std::string &strFileName,const unsigned int version = SERIALIZATION_VERSION)
    37. {
    38.         try
    39.         {
    40.                 std::ifstream ifs(strFileName.c_str());
    41.                 boost::archive::xml_iarchive ia(ifs);
    42.                 ia >> BOOST_SERIALIZATION_NVP(templateStruct);
    43.         }
    44.         catch (...)
    45.         {
    46.                 return -1;
    47.         }
    48.         return 0;
    49. }
    50. //
    51. #endif
    复制代码

    3、直接调用save(xxxxSet, szFileName) 即可序列化数据列表,load反之。
    清泛网 - 专注IT技能提升
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2024 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2024-11-23 02:32 , Processed in 0.026436 second(s), 37 queries .