5.2 Serialization Implementation Notes(2)

Code Structure

这个库包括大量的文件,这些文件根据其在上面的索引中列出的用途进行组织和分类。类和模板的命名空间与文件所在的目录保持同步。例如,类声明

boost::archive::text_oarchive

与以下声明一起包含:

#include <boost/archive/text_oarchive.hpp>

1 Files Included by User Programs

使用这个库需要包括在这个部分列出的头文件。不需要显式包括任何其他头文件

1.1Archive Implementations

这些头文件包含了用于将数据保存和还原到每种类型的存档的声明。根据代码模块所需的功能包括相应的存档。

boost/archive/archive_exception.hpp
	//Exceptions which might be invoked by the library.
boost/archive/binary_iarchive.hpp
	//native binary input archive used for loading.
boost/archive/binary_oarchive.hpp
	//native binary output archive used for saving.
boost/archive/text_iarchive.hpp
	//text input archive used for loading.
boost/archive/text_oarchive.hpp
	//text output archive used for saving.
boost/archive/text_wiarchive.hpp
	//wide character text input archive used forloading.
boost/archive/text_woarchive.hpp
	//wide character text input archive used for saving.
boost/archive/xml_iarchive.hpp
	//xml input archive used for loading.
boost/archive/xml_oarchive.hpp
	//xml output archive used for saving.
boost/archive/xml_wiarchive.hpp
	//wide character xml input archive used for loading.
boost/archive/xml_woarchive.hpp
	//wide character xml output archive used for saving.

1.2 Serialization Declarations

要指定如何序列化一个类型,你需要编写用于序列化的函数模板。在最简单的情况下,这不需要包含任何额外的头文件。但在大多数情况下,为了完善或优化某个类的序列化实现描述,你可能需要包含以下其中一个或多个头文件。

boost/serialization/base_object.hpp
	//For serialization of base classes.
boost/serialization/nvp.hpp
	//To associate a name tag with a serializable object. This is necessary to properly render an xml archive which includes the object name.
boost/serialization/split_free.hpp
	//To divide implementation of non-intrusive serialization into separate save and load functions.
boost/serialization/split_member.hpp
	//To divide implementation of intrusive serialization into separate save and load functions.
boost/serialization/export.hpp
	//For serialization of pointers to derived classes via key export.
boost/serialization/assume_abstract.hpp
	//This is just a thin wrapper which permits one to explicitly specify that a particular type is an abstract base class. It is necessary to use this for compilers which don't support the boost type traits implementation of is_abstact.

这个组通常需要的次数较少。它们用于覆盖默认的序列化过程实现中指定类型的某些方面。

boost/serialization/version.hpp
	//To override the default version index (0) assigned to a class.
boost/serialization/level.hpp
	//To override the default implementaton level trait for a type.
boost/serialization/tracking.hpp
	//To override the default tracking trait for a type.
boost/serialization/type_info_implementation.hpp
	//By default, the library uses RTTI, to identify types at runtime. In some cases, E.G. such as a platform which doesn't implement RTTI, this header can be included to permit the override of the default runtime type identification system.

1.3 Serialization Implementations

这一组头文件包含了为标准库或Boost库模板实现序列化的模板。任何使用这些模板的程序只需包含相应的头文件,就可以调用这些类型的对象的序列化。

按照约定,这些头文件的命名方式是:boost/serialization/xxx.hpp,其中xxx是包含要序列化类型的头文件的名称。例如,下面的声明:

#include <boost/serialization/list.hpp>

第一个代码包含了用于实现STL标准库的std::list类型的序列化的代码。

#include <boost/serialization/shared_ptr.hpp>

而第二个代码包含了用于实现BOOST库的boost::shared_ptr类型的序列化的代码。需要注意的是,包含一个类型的序列化头文件会自动包含该类型要序列化的适当头文件。截止到目前为止,该库包括了所有STL库模板的模板,以及boost::optional、boost::shared_ptr和boost::scoped_ptr的模板。可以预期,随着时间的推移,这个列表会不断扩展。

2 Files Which Implement the Library

2.1 Archive Development

这些头文件包含了用于创建具体归档类型的基本类型声明,这些归档类型将提供给用户使用。希望创建自己类型的归档的用户可能希望查看这些头文件,以了解库中包含的归档是如何构建的。

  • boost/archive/basic_archive.hpp
    这个文件包含了在所有归档实现中都必须考虑的特定类型的声明。序列化系统依赖于某些特殊类型,如class_id_type等,以记录在归档中所需的用于重建原始数据结构的信息。这些类型与任何其他可序列化类型的处理方式完全相同。也就是说,它们可以像在简单文本文件中那样处理为简单的原始数据类型,或者可以像在 XML 归档中那样使用特殊代码处理。

  • boost/archive/basic_text_oprimitive.hpp

  • boost/archive/basic_text_iprimitive.hpp
    基于字符或宽字符文本流的原始类型序列化的实现。这在文本和 XML 归档的实现中使用。可以推测,这对于其他文本归档变种的实现也会很有用,比如用户友好的文本或Windows INI文件。

  • boost/archive/basic_binary_oprimitive.hpp

  • boost/archive/basic_binary_iprimitive.hpp
    基于字符或宽字符二进制流的原始类型序列化的实现。

  • boost/archive/basic_binary_oarchive.hpp

  • boost/archive/basic_binary_iarchive.hpp
    将所有类型基于字符或宽字符的二进制流进行序列化的实现。这与上面的二进制基元实现分开。这可以有助于在将来创建其他类型的二进制归档。它还保持了与库中其他部分的类比和对称性,有助于理解。

  • boost/archive/basic_text_oarchive.hpp

  • boost/archive/basic_text_iarchive.hpp

  • boost/archive/basic_xml_oarchive.hpp

  • boost/archive/basic_xml_iarchive.hpp
    将所有类型基于字符或宽字符文本流进行序列化的实现。这些类在基于类型的基础上指定了与归档类型相关的行为。例如,basic_xml_oarchive.hpp 包含代码来确保任何未附加到名称的对象在编译时会触发错误。另一方面,basic_text_oarchive.hpp 包含代码来剥离并忽略附加到对象的任何名称。

  • boost/archive/detail/common_iarchive.hpp

  • boost/archive/detail/common_oarchive.hpp
    所有归档实现都是从这些头文件派生的。它们为库的内部实现细节提供了接口。

2.2 Archive Internals

2.3 Archive Library Code Modules

2.4 Dataflow Iterators

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值