使用 protobuf 枚举值作为字段编号

Posted

技术标签:

【中文标题】使用 protobuf 枚举值作为字段编号【英文标题】:Using protobuf enum value as a field number 【发布时间】:2014-03-17 05:50:29 【问题描述】:

我想知道是否可以使用 Google Protocol Buffers 的枚举常量作为其他消息的字段编号,例如

enum Code 
  FOO = 100;
  BAR = 101;


message Message 
  required string foo = FOO;

此代码不起作用,因为FOO 的类型是enum Code,并且只能使用数字作为字段编号。

我正在尝试构建像animal example 这样的多态消息定义,它将enum Typerequired Cat animal = 100; 中的Cat = 1; 定义为唯一的分机号。

我认为这样做会很好

message Message 
  required string foo = FOO.value;

,这样我就可以保证扩展字段号的唯一性,而不需要引入另一个幻数。

那么问题来了:是否可以在协议缓冲区语言中引用枚举的整数值?

【问题讨论】:

据我所知,简单地说:“没有” 【参考方案1】:

不,没有办法做到这一点。对不起。

顺便说一句,相同枚举类型的两个枚举数实际上可以具有相同的数值,因此在枚举中定义这些值实际上并不能确保唯一性。

【讨论】:

感谢您的澄清!

以上是关于使用 protobuf 枚举值作为字段编号的主要内容,如果未能解决你的问题,请参考以下文章

Protobuf“字段1”的意义是啥?

由于 C++ 而解决 Google protobuf 中的枚举字段命名限制的解决方案

来自 json 的原型反序列化将在新字段或未知枚举值上失败

使用带有标志枚举的 ProtoBuf-Net 时出错

Protobuf3语言指南

十五.ProtoBuf3的基础总结