c++ - C 结构 (C++ POD) 和 google protobufs 之间的转换?

标签 c++ c data-structures protocol-buffers idl

我的代码目前传递大量(有时是嵌套的)C(或 C++ 普通旧数据)结构和数组。

我想将它们与 google protobufs 相互转换。我可以手动编写在这两种格式之间进行转换的代码,但自动生成此类代码会更不容易出错。做这个的最好方式是什么? (这在具有足够自省(introspection)能力的语言中很容易迭代成员变量的名称,但这是我们正在谈论的 C++ 代码)

我正在考虑的一件事是编写 python 代码来解析 C 结构,然后吐出一个 .proto 文件,以及为所有类型从一个成员复制到另一个成员(在任一方向)的 C 代码,但也许有更好的方法……或者可能已经有另一个 IDL 可以生成:

  1. .h 包含所有嵌套类型的文件
  2. .proto 文件包含等价物
  3. .c 文件包含的函数可以在 .proto 文件生成的 C++ 结构和 .h 文件中定义的结构之间双向复制

最佳答案

我找不到解决这个问题的现成解决方案,如果有的话,请告诉我!

如果您决定在 Python 中自己动手,python bindings for gdb可能有用。然后您可以读取符号表,找到指定文件中定义的所有结构,并迭代所有结构成员。 然后使用 <gdbtype>.strip_typedefs()获取每个成员的原始类型并将其转换为适当的 protobuf 类型。

这可能比文本解析器更安全,因为它将处理依赖于体系结构、编译器标志、预处理器宏等的类型。

我猜也可以从结构成员到消息字段关系生成与 protobuf 相互转换的代码,但听起来并不容易。

关于c++ - C 结构 (C++ POD) 和 google protobufs 之间的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13073930/

相关文章:

java - 存储多个相关值进行排序的最有效方法?

c++ - 从模板函数内部的类型中删除 const-ness

c++ - 使用 C++ 在结构中初始化列表容器对象?

c++ - 在大型 MEMORY.DMP 文件中搜索字符串

c - C 编程中的访问指针

javascript - 如何在 JavaScript 中迭代此 List 类的实例

algorithm - 用于查找具有相似含义的单词的最佳数据结构

c++ - 在 C++ 中传递非静态成员函数指针

c - TCP 套接字 : Can read() still fail with EINTR when select() indicates there are data available?

objective-c - C 和 Objective C 中的 block 之间的区别