網(wǎng)站首頁(yè) 編程語(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::array
或std::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
相關(guān)推薦
- 2023-07-25 使用EasyExcel實(shí)現(xiàn)Excel的導(dǎo)入導(dǎo)出
- 2022-05-12 Python中賦值運(yùn)算符的含義與使用方法_python
- 2023-11-21 什么是交叉編譯、交叉編譯有什么用,為什么需要交叉編譯
- 2022-01-22 Redis——docker構(gòu)建的Redis集群
- 2023-03-22 Go語(yǔ)言實(shí)現(xiàn)猜謎小游戲_Golang
- 2022-06-01 Python+Opencv實(shí)現(xiàn)計(jì)算閉合區(qū)域面積_python
- 2022-05-20 SpringCloud系列:springboot改造集成nacos
- 2022-06-02 一篇文章帶你了解Python中的裝飾器_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支