我使用protobuf的枚举在C++应用程序和Java应用程序之间共享值。这样,相同的(int
)值在语言之间共享,并且这些值在编译时可用。我可以通过不同的方式在共同的.proto
文件中定义它,以此类似于字符串吗?我可以在protobuf中定义一个常量字符串吗?
4
A
回答
10
不是。
有几个黑客可以使用。两者都不是很适合,并且(我认为)两者都在proto3中消失:
- 定义带有字符串字段的消息并为其指定一个默认值,该值是您的常量值。但是,Protobuf 3显然正在移除默认值。
- 使用"custom options",应该可能被称为“注释”,因为它们很像Java或其他语言中的注释。您可以声明一个类型为string的注释,然后用注释注释一些虚拟声明并使用常量值。然而,自定义选项是基于的在proto3中删除的扩展,所以我假定自定义选项也被删除了。 (这是这里提供的答案:https://stackoverflow.com/a/11486640/2686899)
FWIW,Cap'n Proto,替代协议缓冲区,不支持常量。 (披露:我是Cap'n Proto的作者以及Google的Protobuf v2的大部分作品。)
+0
我结束了使用选项1.我定义了一个消息带有默认值的字段,然后使用默认实例来访问它们。它非常干净,但如上所述,在protobuf 3中不被支持。其中一个有用的原因是您获得了protobuf的所有“反射”功能:遍历字段,按编号/名称获取字段... – ytoledano
相关问题
- 1. MVC Razor RC 1:@section可以用字符串常量定义吗?
- 2. 我可以定义哪些字符可以“破”一个字吗?
- 3. 我可以在字符串中插入一个变量吗?
- 4. 可以在css中定义常量吗?
- 5. 我可以从C#中的const char初始化一个常量字符串吗?
- 6. 在SQL Server中定义一个字符串常量?
- 7. 可以在C#格式字符串中定义最大数量的字符吗?
- 8. 我可以在一个字符串中放置圆括号吗?
- 9. 我可以在.NET中格式化一个字符串吗?
- 10. 我可以在一个字符串中使用str_replace两次吗?
- 11. 我们可以在Codeigniter中定义常量数组吗?
- 12. 您可以在主题表中定义一个字符串作为x:key值吗?
- 13. 我可以在字符串中设置特定字节吗?
- 14. 我可以在格式字符串中添加变量吗?
- 15. 我可以使用jQuery在HTML中定位一个文本字符串吗?
- 16. 定义从一个字符串变量
- 17. 我可以传递一个字符串到fopen()吗?在c
- 18. 我可以从字符串中获得一个PTypeInfo吗?
- 19. 错误而定义字符串常量
- 20. 如何在protobuf 3中定义一个可选字段
- 21. 我可以在PHP中定义多少个最大常量?
- 22. 在AndroidManifest.xml中定义一个字符串
- 23. 可以反编译我的应用程序以显示字符串常量吗?
- 24. 我可以转义变量名称中的字符吗?
- 25. 你可以在Coldfusion中一次性定义多个变量吗?
- 26. 我可以在C#中定义一个类Perl的绑定运算符(=〜)吗?
- 27. 在字符串格式中,我可以一次只替换一个参数吗?
- 28. 在SQLalchemy中,我可以有一个包含多个字符串的列吗?
- 29. 你可以在PostgresSQL中反转一个字符串吗?
- 30. 我可以解开一个字符串吗?
我自发的回答是否定的。为什么你想分享一个字符串。您是否有两个模块进行通信,它将浪费带宽来传输字符串而不是枚举常量。 – Emil
Protobuf允许枚举,那些枚举可以,但不必通过线传输。如果我在C++和Java应用程序中使用基本上是常量的枚举,那么我不会通过线传输任何东西,但它们都使用'.proto'中定义的相同值。 – ytoledano
我在前一段时间尝试将字符串与枚举关联时遇到过类似问题,请问这里的答案对您有帮助吗? http://stackoverflow.com/questions/11474416/define-dictionary-in-protocol-buffer – whrrgarbl