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的生成与使用 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

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

    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