您可能知道,当您使用全局范围或相同的消息在Google protobuf中定义枚举时,如果枚举是兄弟,则无法将枚举字段名称定义为相同.
即使您要使用proto文件生成Java代码,protoc也会抱怨它,并且不会生成包含以下消息的任何代码.
"XXX" is already defined in "your.package.name".
Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type,
not children of it.
Therefore, "XXX" must be unique within "your.package.name", not just within "your_enum_name".
Run Code Online (Sandbox Code Playgroud)
所以,这意味着你应该做的事情
要么
要么
似乎C++ 11支持没有这个问题的更好的枚举,但遗憾的是最新的protoc不支持它,我们不能简单地要求其他消费者切换他们的一方使用C++,如果他们不使用它.
因此,它将选择较差的解决方案而不是最佳解决方案,并且可能我们将在此时使用#2.有没有人有相同的经验,告诉我你的解决方案是什么,它是如何结束的?