protobuf3のenumのscope
protoのenumのスコープ
概要
- enumを宣言する際に考慮する点のメモ
enumのscoping rule
enum valueはC++のスコープルールに準拠している。
unscoped enumerationとscoped enumerationがあり、unscoped enumerationで名前がかぶると
Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it
というエラーで弾かれる。
enum Enum1{
X=0;
Y=1;
}
~
enum Enum2{
X=0;
Z=1;
}
scoped enumeration
下記の様に、messageでencloseすることで、scoped enumerationとなるためエラーは発生しない。
message Enum1{
enum Enum{
X=0;
Y=1;
}
}
message Enum2{
enum Enum{
X=0;
Y=1;
}
}
prefixing enumeration
または、prefixをつけることで対応も可能。
enum Enum1{
E1_X=0;
E1_Y=1;
}
enum Enum2{
E2_X=0;
E2_Z=1;
}
google style guideではprefixing enumが推奨される。
zero value enum
zero value enumにはsuffix UNSPECIFIEDを利用することが推奨される。
enum Foo {
FOO_UNSPECIFIED = 0;
FOO_FIRST_VALUE = 1;
FOO_SECOND_VALUE = 2;
}