一、说明
用于优化的包装函数:本节介绍包装函数以优化序列化过程。这些函数标记对象以允许 Boost.Serialization 应用某些优化技术。
二、示范和代码
示例 64.14。在没有包装函数的情况下序列化数组
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <sstream>
using namespace boost::archive;
std::stringstream ss;
void save()
{
text_oarchive oa{ss};
boost::array<int, 3> a{{0, 1, 2}};
oa << a;
}
void load()
{
text_iarchive ia{ss};
boost::array<int, 3> a;
ia >> a;
std::cout << a[0] << ", " << a[1] << ", " << a[2] << '\n';
}
int main()
{
save();
load();
}
Example 64.14
示例 64.14 使用没有任何包装函数的 Boost.Serialization。该示例创建值 22 serialization::archive 11 0 0 3 0 1 2 并将其写入字符串。使用包装函数 boost::serialization::make_array(),写入的值可以缩短为以下字符串:22 serialization::archive 11 0 1 2。
示例 64.15。使用包装函数 make_array() 序列化数组
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/array.hpp>
#include <array>
#include <iostream>
#include <sstream>
using namespace boost::archive;
std::stringstream ss;
void save()
{
text_oarchive oa{ss};
std::array<int, 3> a{{0, 1, 2}};
oa << boost::serialization::make_array(a.data(), a.size());
}
void load()
{
text_iarchive ia{ss};
std::array<int, 3> a;
ia >> boost::serialization::make_array(a.data(), a.size());
std::cout << a[0] << ", " << a[1] << ", " << a[2] << '\n';
}
int main()
{
save();
load();
}
boost::serialization::make_array ()
函数需要地址和数组的长度。 由于长度是硬编码的,所以它不需要作为boost::array
类型的一部分序列化。
换个说法就是:boost::serialization::make_array() 需要数组的地址和长度。但是,因为它是预先知道的,所以不需要将长度序列化为数组的一部分。
任何时候,如果boost::array
或std::vector
包含一个可以直接序列化的数组,都可以使用这个函数。 其他一般需要序列化的属性不能被序列化。
另一个 Boost.Serialization 提供的封装函数是boost::serialization::make_binary_object ()
。 与boost::serialization::make_array ()
类似,它也需要地址和长度。boost::serialization::make_binary_object ()
函数只是为了用来序列化没有底层结构的二进制数据,而boost::serialization::make_array ()
是用来序列化数组的。
只要 std::array 或 std::vector 等类包含可以直接序列化的数组,就可以使用 boost::serialization::make_array()。跳过通常也会被序列化的其他成员变量(参见示例 64.15)。
Boost.Serialization 还提供包装器 boost::serialization::make_binary_object()。类似于 boost::serialization::make_array(),此函数需要一个地址和一个长度。 boost::serialization::make_binary_object() 仅用于没有底层结构的二进制数据,而 boost::serialization::make_array() 用于数组。
到此这篇关于C++浅析序列数据封装与优化实现方法的文章就介绍到这了,更多相关C++序列数据封装与优化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!