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

2022-09-01 23:07:52

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


答案 1

没有。

您可以使用一些技巧。两者都不适合,(我认为)两者都在proto3中消失:

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

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


答案 2

推荐