2017-08-17 140 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文件,則更改它可能會有問題,除非他們很樂意更新其代碼以符合任何新的資格要求。

相關問題