来自协议缓冲区消息的普通结构

Plain struct from protocol buffer message

有没有办法在 C++ 中从协议缓冲区消息中获取简单的结构? 即

struct PlainFoo {
  int32_t bar;
  float baz;
};

来自

message Foo {
  required int32 bar = 1;
  required float baz = 2;
}

我通过网络在协议缓冲区中获取了一些数据,我希望能够将其添加到其他类似数据中并将其存储在紧凑的表示形式中以供内部使用,而无需基本上复制我的消息声明代码。

我知道我可以使用生成的消息 class 本身,但它有一堆内部成员,我不想四处移动。

有问题的消息只有必填字段。

我不知道会生成普通结构的 C++ protobuf 库,但也有一些 C 库也可以在 C++ 代码中使用。至少 nanopb and pbtools 生成简单结构:

/* nanopb */
typedef struct _Foo {
    int32_t bar;
    float baz;
} Foo;
/* pbtools */
struct Foo_t {
    int32_t bar;
    float baz;
};

使用 nanopb,您还可以选择使用 PB_BIND().proto 文件中的标记号定义连接到您自己的代码中定义的结构。如果您想将代码与接口规范分离,这会很有用,例如允许添加未序列化的额外字段。