2017-08-17 88 views
1

我遇到了一个用例,我想将一个协议缓冲区消息中声明的枚举移动到该消息的外部,以便其他消息使用相同的枚举。使用协议缓冲区,将枚举从内部消息移动到外部消息是否安全?

即,我想知道是否有此

message Message { 
    enum Enum { 
     VALUE1 = 1; 
     VALUE2 = 2; 
    } 
    optional Enum enum_value = 1; 
} 

移动到这个

enum Enum { 
    VALUE1 = 1; 
    VALUE2 = 2; 
} 
message Message { 
    optional Enum enum_value = 1; 
} 
请问

这会引起其他问题,反序列与第一协议缓存定义创建数据的任何问题进入第二个?

回答

1

它根本不会更改序列化数据 - 枚举的位置/名称与实际数据无关,因为它只存储整数值。

什么威力变化是一些语言消耗枚举,即如何他们如何限定它。是X.Y.FooX.Foo,还是Foo。请注意,因为枚举遵循C++命名/范围规则,所以有些事情(如冲突)不是问题:但它可能会影响某些语言作为消费者。所以:如果你是.proto的唯一消费者,那么你在这里绝对没问题。如果您与其他人分享了.proto文件,则更改它可能会有问题,除非他们很乐意更新其代码以符合任何新的资格要求。

相关问题