我可以在protobuf中定义一个常量字符串吗?

时间:2016-02-29 11:53:14

标签: java c++ protocol-buffers

我使用protobuf的枚举来共享C ++应用程序和Java应用程序之间的值。这样,语言之间共享相同的(int)值,并且这些值在编译时可用。我可以通过以某种方式在公共.proto文件中定义它来执行与字符串类似的操作吗?

1 个答案:

答案 0 :(得分:17)

不是。

你可以使用几种黑客。两者都不合适,而且(我认为)两者都在proto3中消失:

  • 使用字符串字段定义消息,并为其指定一个默认值,即您的常量值。但是,Protobuf 3显然正在删除默认值。
  • 使用"custom options",这应该被称为"注释"因为它们很像Java或其他语言的注释。您可以声明类型字符串的注释,然后使用注释注释一些虚拟声明并使用常量值。但是,自定义选项基于在proto3中删除的扩展,因此我假设自定义选项也已删除。 (这是答案:https://stackoverflow.com/a/11486640/2686899。)

FWIW,Cap'n Proto,是协议缓冲区的替代方案,支持常量。 (披露:我是Cap' n Proto以及Google的大部分Protobuf v2的作者。)