C++Protobuf的生成与使用

2023-11-09

编写.proto文件
  1. syntax:表明protobuf的版本号(末尾不要忘了;)
  2. package:表明生成的类对象位于哪一个命名空间(末尾不要忘了;)
  3. 每一个类属性后面的必须跟一个编号,且不能重复
syntax="proto3";
package Protocol;
message User{
	string name=1;
	int32 age=2;
}
message UserGroup{
	repeated User userList=1;
}
.proto文件转为c++类

写一个run.bat的批处理文件(只要是xxx.bat就行)

  1. xxx.exe:用于生成类的可执行文件
  2. –cpp_out:指定生成的类对象为cpp且文件保存至后面的相对路径下
  3. xxx.proto:用于参照的proto文件(相对路径)
  4. pause:在执行完成后暂停窗口(不写窗口一闪就关闭了),如果有报错就便于定位修改

如果我们有多个.proto文件那就写多行这个命令(.bat是批处理命令文件,都能执行),只根据不同的需求修改某些内容即可

protoc.exe --cpp_out=ProtobufTest2 User.proto
pause

点击.bat文件,然后你就能在写的路径下看见这些自动生成的cpp文件(仔细阅读黑窗里的文字,如果有错误照着修改即可)

image-20201004093326699

C++使用Protobuf对象
/*************************属性获取与修改**********************************/
Protocol::User user;
user.set_age(10);//设置对象的属性
int age = user.age();//获得对象属性
Protocol::UserGroup UG;
auto p= UG.add_userlist();//在数组属性中增加一个元素,返回的是指向增加元素的指针
*p = user;//通过指针修改新增元素
Protocol::User user2 = UG.userlist(0);//获得数组属性中指定下标元素(没有索引的方式)
/***********************************序列化与反序列化***************************************/
string str;
UG.SerializeToString(&str);
Protocol::UserGroup UG2;
UG2.ParseFromString(str);
/****************************************反射********************************************/
string protoName="Protocol.UserGroup";//需要生成的类名字(前面是命名,命名空间的名称)
//通过DescriptorPool获得对象的descriptor
auto descriptor = google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName(protoName);
//使用descriptor获得对象类型
auto type = google::protobuf::MessageFactory::generated_factory()->GetPrototype(descriptor);
//实例化
auto message = type->New();
//为实例化的对象反序列化数据
message->ParseFromString(str);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++Protobuf的生成与使用 的相关文章

  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • 数据结构-----顺序表与单链表的实现

    1 顺序表 实现顺序表的初始化 插入 删除 查找 逆置 合并等操作 include
  • Python numpy函数:reshape()

    reshape 是数组对象中的方法 用于改变数组的形状 形状变化是基于数组元素不能改变的 变成的新形状中所包含的元素个数必须符合原来元素个数 如果数组元素发生变化的时候 就会报错 reshape函数生成的新数组和原始数组公用一个内存 也就是
  • 【数据库】数据库入门(七): 函数依赖(Functional Dependencies)

    前言 一个设计良好的数据库模式 database schema 应该要具备以下特点 完整性 Completeness 减少冗余 Redundancy freeness 一致的含义 Consistent understanding 良好的性能
  • QFileInfo获取文件信息

    它可以获取很多文件的信息 比如文件的大小 文件的类型 文件的创建日期等等 下面是获取一些文件信息的方法 先要头文件 include
  • 跨境市场下一个蓝海:区块链+跨境支付?

    全球经济的现在需要跨境支付的场景越来越多 比如出国旅游 求学 海外购物等 但是跨境支付中会面临高昂手续费 交易过程繁琐 收款时间漫长等问题 跨境市场 下一个蓝海 随着近年来跨境电商的迅猛发展 越来越多的优质海外商品郑加速进入中国市场 跨境市
  • vite --- 为什么选Vite

    目录 什么是Vite 为什么选Vite 现实问题 为什么生产环境仍需打包 Vite 与竞品 什么是Vite Vite 法语意为 快速的 发音 vit 发音同 veet 是一种新型前端构建工具 能够显著提升前端开发体验 它主要由两部分组成 一
  • 版本号的正则表达式

    验证版本号的正则表达式 要求 必须是三位 x x x的形式 每位x的范围分别为1 99 0 99 0 99 不允许的情况0 x x 01 x x x 0x x x 00 x x x 00 x x 0x 满足这些条件的正则为 1 9 d 1
  • 电路基础_模拟电路_问答_2023_02

    101 图解分析法 饱和失真和截止失真都是由晶体管输入 输出特性的非线性造成 统称为非线性失真 为减小非线性失真 必须合理选择静态工作点的位置并适当限制输入信号的幅度 图解法分析放大器 1 确定静态工作点 分析电路参数对Q点的影响 2 根据
  • Android http网络请求设置以及设置网络权限

    在project下 一 HTTP网络请求设置 第一步 在res的xml目录下 新建一个xml文件 名称 network security config xml 在 network security config xml 中添加代码
  • 准备离职搞ue4

    确实不合适搞webgl 我决定离职了 得到一个offer UE4 估计看我c 图形学还行吧 年龄偏大 没有UE4经验 也没有长期游戏经验 所以ue4岗位被拒很多 工作机会来之不易 得拼命干了 憋着一肚子气 webgl再努力 也是难以发挥 哎
  • C++ 基础技术再深入(模板)template parameter和template argument(10)---《C++ Templates》

    参数化声明 template和class或者function的区别在于templates声明语句有一个参数化子句 template lt parameters here gt 或者 export template lt parameters
  • codeforces 1217d D. Coloring Edges

    题意 一个有向图 染色 环的边不能只有1个颜色 问需几种颜色及染色方案 最多2种颜色 无环时1种 有环时2种 用dfs判环 类似tarjan 还在栈中的点又被访问就有环 backedge染2 其他染1 简化一下 如果有环ai
  • bash:XXX.sh权限不够

    在linux上执行shell脚本时提示 bash start sh权限不够 解决办法 chmod 777 start sh
  • feof()和EOF的用法—— C中文件结尾的判断

    昨天突然被一位朋友问到了关于文件结尾的程序问题 在用feof 判断文件时 复制会多产生一个字符 这个问题在大一的时候 老师上课就强调过 但那时只是模糊的记得个大概 记得这个函数如果用的不对就是会出现问题 解决是要先读一下 然后再判断 具体的
  • 【ODOO15源码安装步骤 亲测成功】

    ODOO15源码安装步骤 亲测成功 odoo ubuntu 安装方法 进入ubuntu 后 运行 sudo apt update sudo apt upgrade 下面正式安装 odoo 相关的 东东 一 安装postgresql 安装po
  • 诛仙哪里炼器服务器最稳定,诛仙手游150级之前最稳妥炼器攻略

    1 此方法适用于心不太野的V7 V9玩家 2 此方法不适用于装备上15 3 此方法不太适用于首饰炼器 4 此方法可以保证你的战力水平保持在所在服务器中等偏上 5 此方法只能保证过渡装备 100 130级 的炼器 终极装备炼器无用 一 炼器之
  • 记录:Sharding-Jdbc 配置max.connections.size.per.query造成的死锁问题

    记录 Sharding Jdbc 配置max connections size per query造成的死锁问题 项目场景 版本 jdk11 sharding jdbc4 1 1 mysql8 0 分表 table表根据 主键id 水平分表
  • 52. N-Queens II

    Follow up for N Queens problem Now instead outputting board configurations return the total number of distinct solutions
  • 奇淫巧技,CompletableFuture 异步多线程是真的优雅

    一个示例回顾Future 一些业务场景我们需要使用多线程异步执行任务 加快任务执行速度 JDK5新增了Future接口 用于描述一个异步计算的结果 虽然 Future 以及相关使用方法提供了异步执行任务的能力 但是对于结果的获取却是很不方便
  • C++Protobuf的生成与使用

    编写 proto文件 syntax 表明protobuf的版本号 末尾不要忘了 package 表明生成的类对象位于哪一个命名空间 末尾不要忘了 每一个类属性后面的必须跟一个编号 且不能重复 syntax proto3 package Pr