日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C++淺析序列數(shù)據(jù)封裝與優(yōu)化實(shí)現(xiàn)方法_C 語(yǔ)言

作者:無(wú)水先生 ? 更新時(shí)間: 2022-12-31 編程語(yǔ)言

一、說(shuō)明

用于優(yōu)化的包裝函數(shù):本節(jié)介紹包裝函數(shù)以優(yōu)化序列化過(guò)程。這些函數(shù)標(biāo)記對(duì)象以允許 Boost.Serialization 應(yīng)用某些優(yōu)化技術(shù)。

二、示范和代碼

示例 64.14。在沒(méi)有包裝函數(shù)的情況下序列化數(shù)組

#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 使用沒(méi)有任何包裝函數(shù)的 Boost.Serialization。該示例創(chuàng)建值 22 serialization::archive 11 0 0 3 0 1 2 并將其寫(xiě)入字符串。使用包裝函數(shù) boost::serialization::make_array(),寫(xiě)入的值可以縮短為以下字符串:22 serialization::archive 11 0 1 2。

示例 64.15。使用包裝函數(shù) make_array() 序列化數(shù)組

#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 ()函數(shù)需要地址和數(shù)組的長(zhǎng)度。 由于長(zhǎng)度是硬編碼的,所以它不需要作為boost::array類(lèi)型的一部分序列化。

換個(gè)說(shuō)法就是:boost::serialization::make_array() 需要數(shù)組的地址和長(zhǎng)度。但是,因?yàn)樗穷A(yù)先知道的,所以不需要將長(zhǎng)度序列化為數(shù)組的一部分。

任何時(shí)候,如果boost::arraystd::vector包含一個(gè)可以直接序列化的數(shù)組,都可以使用這個(gè)函數(shù)。 其他一般需要序列化的屬性不能被序列化。

另一個(gè) Boost.Serialization 提供的封裝函數(shù)是boost::serialization::make_binary_object ()。 與boost::serialization::make_array ()類(lèi)似,它也需要地址和長(zhǎng)度。boost::serialization::make_binary_object ()函數(shù)只是為了用來(lái)序列化沒(méi)有底層結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),而boost::serialization::make_array ()是用來(lái)序列化數(shù)組的。

只要 std::array 或 std::vector 等類(lèi)包含可以直接序列化的數(shù)組,就可以使用 boost::serialization::make_array()。跳過(guò)通常也會(huì)被序列化的其他成員變量(參見(jiàn)示例 64.15)。

Boost.Serialization 還提供包裝器 boost::serialization::make_binary_object()。類(lèi)似于 boost::serialization::make_array(),此函數(shù)需要一個(gè)地址和一個(gè)長(zhǎng)度。 boost::serialization::make_binary_object() 僅用于沒(méi)有底層結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),而 boost::serialization::make_array() 用于數(shù)組。

原文鏈接:https://yamagota.blog.csdn.net/article/details/128154304

欄目分類(lèi)
最近更新