C结构(C++ POD)和谷歌protobufs之间的转换?

And*_*ner 7 c c++ idl protocol-buffers data-structures

我的代码目前传递了很多(有时是嵌套的)C(或C++ Plain Old Data)结构和数组.

我想将这些转换为谷歌protobufs.我可以手动编写在这两种格式之间进行转换的代码,但是自动生成此类代码的错误会更少.做这个的最好方式是什么?(在具有足够内省的语言中迭代成员变量的名称会很容易,但这是我们正在讨论的C++代码)

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

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

Din*_*ino 1

可以通过使用TextFormat解析 ASCII 表示来构建协议缓冲区。因此,一种选择是dumpAsciiProtoBuf向每个结构添加一个方法。该方法将转储任何简单字段(如字符串、布尔值等)并递归dumpAsciiProtoBuf调用嵌套结构字段。然后,您必须确保连接的结果是有效的 ASCII 协议缓冲区,可以使用TextFormat进行解析。

请注意,这可能会产生一些性能影响(因为解析 ASCII 表示可能会很昂贵)。但是,这可以省去您用不同语言编写转换器的麻烦,因此这似乎是一个方便的解决方案。