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

yto*_*ano 11 c++ java protocol-buffers

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

Ken*_*rda 20

并不是的.

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

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

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

  • proto3 的文档说“请注意,创建自定义选项使用扩展名,仅允许 proto3 中的自定义选项”。proto3 文档链接到 proto2 文档以获取@kenton-varda 的答案中的自定义选项。 (2认同)