当前位置: 首页 > news >正文

2407C++,从构生成协议文件

原文

protobuf会根据proto文件生成c++对象及其序化/反序化方法,而iguanastruct_pb则是以结构为核心,编译期反射来生成序化/反序化代码.

有人提出能不能按proto文件输出结构呢,这样就可给其它语言用了,很好建议,实现起来也比较简单.

protobuf是从proto文件到c++对象,而struct_pb则是反之,通过C++结构生成proto文件.

假设有此一个结构:

struct pair_t {int x;int y;
};
REFLECTION(pair_t, x, y);
enum Color { Red = 0, Black = 2, Green = 4 };
struct vector_t {int id;Color color;std::variant<int, pair_t, std::string> variant;std::vector<int> ids;std::vector<pair_t> pairs;std::vector<std::string> strs;std::map<std::string, pair_t> map;std::string name;std::optional<int> op_val;
};

vector_t中有pair_t嵌套结构,枚举类型,vector类型,map类型及变量类型,这样一个结构,如何自动生成对应的pbproto文件呢?
struct_pb提供了个很简单易用的接口:

std::string str;
iguana::to_proto<vector_t>(str, "pb"); //#2
std::cout << str;

#2代码会把proto串输出到str中,"pb"参数是名字空间名,默认为空.最终输出proto文本内容如下:

syntax = "proto3";
package pb;
option optimize_for = SPEED;
option cc_enable_arenas = true;
message vector_t {int32 id = 1;Color color = 2;oneof variant {int32  one_of_int32 = 3;pair_t  one_of_pair_t = 4;string  one_of_string = 5;}repeated  int32 ids = 6;repeated  pair_t pairs = 7;repeated  string  strs = 8;map<string, pair_t>  map = 9;string  name = 10;int32 op_val = 11;
}
message pair_t {int32 x = 1;int32 y = 2;
}
enum Color {Red = 0;Black = 2;Green = 4;
}

这样就避免了自己再根据结构翻译到proto格式的文件了,剩下的就是在文件中保存它,给其它语言使用了.

http://www.lryc.cn/news/394306.html

相关文章:

  • 遗传算法求解TSP
  • 鸿蒙开发:Universal Keystore Kit(密钥管理服务)【明文导入密钥(C/C++)】
  • 视频汇聚/安防监控/GB28181国标EasyCVR视频综合管理平台出现串流的原因排查及解决
  • TypeError: Cannot read properties of null (reading ‘nextSibling‘)
  • 解决 npm intasll 安装报错 Error: EPERM: operation not permitted
  • redis实用技能
  • AcWing 1260:二叉树输出
  • 刷爆leetcode第十期
  • Python28-7.5 降维算法之t-分布邻域嵌入t-SNE
  • 一个最简单的comsol斜坡稳定性分析例子——详细步骤
  • Java 变量类型
  • 【排序算法】—— 快速排序
  • 前端JS特效第22波:jQuery滑动手风琴内容切换特效
  • redis的数据类型对应的使用场景
  • ctfshow-web入门-命令执行(web118详解)Linux 内置变量与Bash切片
  • C语言 指针和数组——指针和二维数组之间的关系
  • 问题集锦1
  • 浅析MySQL-索引篇01
  • 2028年企业云存储支出翻倍,达到1280亿美元
  • ActiViz中的颜色映射表vtkLookupTable
  • 【Spring AOP 源码解析前篇】什么是 AOP | 通知类型 | 切点表达式| AOP 如何使用
  • Laravel HTTP客户端:网络请求的瑞士军刀
  • 7月07日,每日信息差
  • ubuntu 网络常用命令
  • Python28-7.4 独立成分分析ICA分离混合音频
  • Spring Boot与Okta的集成
  • MVC(Model-View-Controller)模式
  • MuLan:模仿人类画家的多对象图像生成
  • 如何在Android中实现网络通信,如HttpURLConnection和HttpClient。
  • 评价ChatGPT与强人工智能的未来