我的代码目前传递大量(有时是嵌套的)C(或 C++ 普通旧数据)结构和数组。
我想将它们与 google protobufs 相互转换。我可以手动编写在这两种格式之间进行转换的代码,但自动生成此类代码会更不容易出错。做这个的最好方式是什么? (这在具有足够自省(introspection)能力的语言中很容易迭代成员变量的名称,但这是我们正在谈论的 C++ 代码)
我正在考虑的一件事是编写 python 代码来解析 C 结构,然后吐出一个 .proto 文件,以及为所有类型从一个成员复制到另一个成员(在任一方向)的 C 代码,但也许有更好的方法……或者可能已经有另一个 IDL 可以生成:
- .h 包含所有嵌套类型的文件
- .proto 文件包含等价物
- .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/