boost-serialization+variant.docx

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录Boost.serialization?序列化11.?概述12.?归档13.?指针和引用104.?对象类层次结构的序列化155.?优化用封装函数20Boost.Variant 变体221类摘要222访问元素233用法244访问器255与any的区别27Boost.serialization?序列化1.?概述Boost C++ 的 序列化库允许将 C++ 应用程序中的对象转换为一个字节序列,此序列可以被保存,并可在将来恢复对象的时候再次加载。各种不同的数据格式,包括 XML,只要具有一定规则的数据格式,在序列化后都产生一个字节序列。所有 Boost.Serialization 支持的格式,在某些方面来说都是专有的。比如 XML 格式不同用来和不是用 C++ Boost.Serialization 库开发的应用程序交换数据。所有以 XML 格式存储的数据适合于从之前存储的数据上恢复同一个 C++ 对象。 XML 格式的唯一优点是序列化的 C++ 对象容易理解,这是很有用的,比如说在调试的时候。2.?归档Boost.Serialization 的主要概念是归档。归档的文件是相当于序列化的 C++ 对象的一个字节流。对象可以通过序列化添加到归档文件,相应地也可从归档文件中加载。为了恢复和之前存储相同的 C++ 对象,需假定数据类型是相同的。下面看一个简单的例子。#include boost/archive/text_oarchive.hpp#include iostreamint main() { boost::archive::text_oarchive oa(std::cout); int i = 1; oa i; } Boost.Serialization 提供了多个归档类,如boost::archive::text_oarchive 类,它定义在boost/archive/text_oarchive.hpp文件中。boost::archive::text_oarchive,可将对象序列化为文本流。上面的应用程序将1写出到标准输出流。可见,boost::archive::text_oarchive 类型的对象oa可以用来像流 (stream) 一样通过来序列化对象。尽管如此,归档也不能被认为是可以存储任何数据的常规的流。为了以后恢复数据,必须以相同的顺序使用和先前存储时用的一样的数据类型。下面的例子序列化和恢复了int类型的变量。#include boost/archive/text_oarchive.hpp#include boost/archive/text_iarchive.hpp#include iostream#include fstreamvoid save() { std::ofstream file(archiv.txt); boost::archive::text_oarchive oa(file); int i = 1; oa i; } void load() { std::ifstream file(archiv.txt); boost::archive::text_iarchive ia(file); int i = 0; ia i; std::cout i std::endl; } int main() { save(); load(); } 当boost::archive::text_oarchive被用来把数据序列化为文本流,boost::archive::text_iarchive就用来从文本流恢复数据。为了使用这些类,必须包含boost/archive/text_iarchive.hpp头文件。归档的构造函数需要一个输入或者输出流作为参数。流分别用来序列化或恢复数据。虽然上面的应用程序使用了一个文件流,其他流,如 stringstream 流也是可以的。#include boost/archive/text_oarchive.hpp#include boost/archive/text_iarchive.hpp#include iostream#include sstreamstd::stringstream ss; void save() { boost::archive::text_oarchive oa(ss); int i = 1; oa i; } void load() { boost::archive::text_iarchive ia(ss); int i = 0; ia i; std::cout i std::endl; } int main() { save(); load(); } 这个应用程序也向标准输出流

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档