Cereal,一个轻量级的 C++ 序列化库!

嗨,大家好!我是橙子。今天咱们来探索超棒的 Cereal 库,它能轻松搞定 C++数据的序列化与反序列化,就像神奇的魔法,把数据变成能存储和传输的格式,然后又能变回来,超有趣哦!快来开启学习之旅。

一、Cereal 基础使用Cereal 是个超好用的 C++模块。首先得包含它的头文件哦,这就像是给我们的代码打开一扇通往序列化世界的门。

#include <iostream>
#include <fstream>
#include <cereal/archives/binary.hpp>// 定义一个简单的结构体
struct MyData {int num;std::string str;// 这是 Cereal 序列化的函数模板template<class Archive>void serialize(Archive & ar) {ar(num, str);  // 就像把数据打包进一个盒子}
};

小贴士:这里的 serialize 函数是关键,它告诉 Cereal 如何处理结构体里的数据哦。

二、数据序列化咱们可以把数据序列化成文件,就像把东西整理好放进仓库。

int main() {MyData data = {42, "Hello, Cereal!"};// 创建一个二进制输出文件流std::ofstream os("data.bin", std::ios::binary);// 用 Cereal 的二进制归档器来序列化数据cereal::BinaryArchive archive(os);archive(data);  // 把数据存进文件return 0;
}

运行后,就会生成一个 data.bin 文件,里面存储了我们的数据。

三、数据反序列化从文件里把数据拿出来还原,就像从仓库里取出东西。

int main() {MyData recoveredData;// 创建二进制输入文件流std::ifstream is("data.bin", std::ios::binary);cereal::BinaryArchive archiveIn(is);archiveIn(recoveredData);  // 把数据从文件读取出来std::cout << "Recovered num: " << recoveredData.num << std::endl;std::cout << "Recovered string: " << recoveredData.str << std::endl;return 0;
}

运行结果会显示出之前序列化的数据。

四、序列化不同数据类型Cereal 还能处理很多数据类型,比如数组、容器等。就像一个万能的收纳盒。

#include <vector>
#include <cereal/archives/json.hpp>// 定义一个包含向量的结构体
struct ComplexData {std::vector<int> vec;template<class Archive>void serialize(Archive & ar) {ar(vec);}
};int main() {ComplexData complex;complex.vec = {1, 2, 3, 4, 5};// 序列化成 JSON 格式的文件std::ofstream os("complex.json");cereal::JSONArchive archive(os);archive(complex);return 0;
}

小贴士:注意选择合适的归档器,比如这里用的是 JSONArchive

今天的 C++学习之旅就到这里啦!记得动手敲代码。祝大家学习愉快,C++学习节节高!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解Java集合的基本用法—Collection:List、Set 和 Queue,Map

本博文部分参考 博客 &#xff0c;强烈推荐这篇博客&#xff0c;写得超级全面&#xff01;&#xff01;&#xff01; 图片来源 Java 集合框架 主要包括两种类型的容器&#xff0c;一种是集合&#xff08;Collection&#xff09;&#xff0c;存储一个元素集合&#xff08;单列…

使用 PDF API 合并 PDF 文件

内容来源&#xff1a; 如何在 Mac 上合并 PDF 文件 1. 注册与认证 您可以注册一个免费的 ComPDFKit API 帐户&#xff0c;该帐户允许您在 30 天内免费无限制地处理 1,000 多个文档。 ComPDFKit API 使用 JSON Web Tokens 方法进行安全身份验证。从控制面板获取您的公钥和密钥&…

架构师:Dubbo 服务请求失败处理的实践指南

1、简述 在分布式服务中,服务调用失败是不可避免的,可能由于网络抖动、服务不可用等原因导致。Dubbo 作为一款高性能的 RPC 框架,提供了多种机制来处理服务请求失败问题。本文将介绍如何在 Dubbo 中优雅地处理服务请求失败,并结合具体实践步骤进行讲解。 2、常见处理方式 …

加载不同本地gltf模型,模型内容不更新的解决方案

相关链接 http://mars3d.cn/editor-vue.html?keyex_6_2_2&idlayer-graphic/draw/draw-model 问题内容 加载本地gltf模型的时候&#xff0c;不clear图层&#xff0c;再打开其他本地gltf&#xff0c;gltf的内容就不更新 重现步骤 进入官网示例&#xff0c;贴入以下代码…

LabVIEW实现串口调试助手

目录 1、串口通信原理 2、硬件环境部署 3、串口通信函数 4、程序架构 5、前面板设计 6、程序框图设计 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联…

云计算的发展历史与未来展望

云计算的起源与发展 云计算的概念最早可以追溯到20世纪60年代&#xff0c;当时的计算机科学家约翰麦卡锡&#xff08;John McCarthy&#xff09;提出了“按需提供计算能力”的构想。尽管这一理念在当时的技术条件下无法实现&#xff0c;但为云计算的未来发展奠定了理论基础。 …

【51单片机】程序实验910.直流电机-步进电机

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 前置知识&#xff1a;C语言 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 码字不易&#xff0c;求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验9&10.直流电机-步进电机…

Linux——自定义简单shell

shell 自定义shell目标普通命令和内建命令&#xff08;补充&#xff09; shell实现实现原理实现代码 自定义shell 目标 能处理普通命令能处理内建命令要能帮助我们理解内建命令/本地变量/环境变量这些概念理解shell的运行 普通命令和内建命令&#xff08;补充&#xff09; …

如何把Qt exe文件发送给其他人使用

如何把Qt exe文件发送给其他人使用 1、先把 Debug改成Release2、重新构建项目3、运行项目4、找到release文件夹5、新建文件夹&#xff0c;存放exe文件6、打开qt控制台串口7、下载各种文件8、压缩&#xff0c;发送压缩包给别人 1、先把 Debug改成Release 2、重新构建项目 3、运行…

Kafka的消费消息是如何传递的?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka的消费消息是如何传递的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka的消费消息是如何传递的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消息的消费是通过消费…

el-drawer如何实现增加resize拖曳改变宽度大小,通过小图标进行拖拽

请先看效果图 我主要是通过这个按钮来进行拖拽的&#xff0c;记住自行添加按钮图片 第一步 新建一个myDrawerDrag.js文件 import Vue from vueVue.directive(drawerDrag, {bind(el, binding, vnode, oldVnode) {const minWidth 400const dragDom el.querySelector(.el-drawe…

C#窗体简单登录

创建一个Windows登录程序&#xff0c;创建两个窗体&#xff0c;一个用来登录&#xff0c;一个为欢迎窗体&#xff0c;要求输入用户名和密码&#xff08;以个人的姓名和学号分别作为用户名和密码&#xff09;&#xff0c;点击【登录】按钮登录&#xff0c;登录成功后显示欢迎窗体…

Java基础全解:构建扎实编程技能

文章目录 1. Hello World 程序深入解析&#xff1a; 2. 数据类型深入解析&#xff1a; 3. 条件判断深入解析&#xff1a; 4. 循环结构深入解析&#xff1a; 5. 数组深入解析&#xff1a; 6. 方法定义与调用深入解析&#xff1a; 1. Hello World 程序 深入解析&#xff1a; 类…

开发规范:Restful风格

REST&#xff08;REpresentational State Transfer&#xff09;&#xff0c;表述性状态转换&#xff0c;它是一种软件架构的风格。这么说可能太过于专业&#xff0c;有些难以理解&#xff0c;不妨看个案例&#xff1a; 传统风格url 假如说我们需要使用传统风格url发起请求&am…

StarRocks-同步hive数据

官方文档对csv&#xff0c;orc ,json &#xff0c;parquet都支持的比较好。写文章的时候SR我们生产用的是3.1.x版本 1、同步hive表textfile格式的数据 hive表结构 CREATE EXTERNAL TABLE ads_d_app_rank_inc(filename string COMMENT 解析的文件名称,rank string COMMENT ap…

【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数

1. UDF函数&#xff08;用户自定义函数&#xff09; 一般指的是用户自己定义的单行函数。一进一出&#xff0c;函数接受的是一行中的一个或者多个字段值&#xff0c;返回一个值。比如MySQL中的&#xff0c;日期相关的dateDiff函数&#xff0c;字符串相关的substring函数。 先…

详解Qt pdf 之QPdfSelection 选择文本类

文章目录 QPdfSelection 类详解前言 详细说明公共函数说明1. 构造函数2. text3. boundingRect4. isEmpty5. startPage6. endPage 使用场景示例代码代码说明总结 QPdfSelection 类详解 前言 QPdfSelection 是 Qt PDF 模块中的一个类&#xff0c;用于表示在 PDF 文档中被选中的…

记录部署dvwa靶场踩的几个坑

DVWA reCAPTCHA key: Missing 解决方法&#xff1a;网上随便copy一个&#xff0c;粘贴到config.inc.php配置文件里&#xff0c;具体我也是参考这篇文章的&#xff1a;DVWA下载、安装You dont have permission to access this resource.Server unable to read htaccess file, de…

linux——进程间通信及管道的应用场景

linux进程的控制-CSDN博客 liunx——进程间通信&#xff08;管道通信&#xff09;-CSDN博客 文章目录 文章目录 前言 二、管道的应用 1.创建子进程 1、描述&#xff1a; 2.创建进程及管理 3、子进程接受任务 4、控制子进程 总结 前言 上篇博客我们学习了进程间通信&…

开发工具WebStorm,VSCode,HbuilderX

WebStorm、VSCode 和 HBuilderX 是三款非常受欢迎的开发工具&#xff0c;各自有不同的特点和适用场景。下面我会详细比较它们的优势和劣势&#xff0c;帮助你选择最合适的开发环境。 1. WebStorm WebStorm 是由 JetBrains 开发的一款强大的 JavaScript IDE&#xff0c;专门针对…