我的proto文件中有两个枚举,它们定义了几乎相同的值。
是否可以删除其中一个并留下别名以保持所有代码正常工作?
示例:
enum A {
a = 0;
b = 1;
}
enum B {
a = 0;
b = 1;
}
我希望在c ++中有类似typedef的内容:
enum A {
a = 0;
b = 1;
}
typedef A B;
我在文档中没有找到这个。有没有解决方法?
答案 0 :(得分:5)
从protobuf版本3开始,这是不可能的。
答案 1 :(得分:2)
这是一个老问题,但如果有些人仍然感兴趣, 现在可以使用protobuf在枚举上创建别名
type Mapper =
abstract Apply<[<Measure>] 'm> : decimal<'m> -> decimal<'m>
let map (f : Mapper) input =
match input with
| CurrencyUsd x -> CurrencyUsd(f.Apply x)
| CurrencyEur x -> CurrencyEur(f.Apply x)
CurrencyUsd(10.M<_>) |> map { new Mapper with member x.Apply m = m + m }
CurrencyUsd(10.M<_>) |> map { new Mapper with member x.Apply m = m * m }
正如官方文件here中所述。您只需添加enum EnumAllowingAlias {
option allow_alias = true;
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
enum EnumNotAllowingAlias {
UNKNOWN = 0;
STARTED = 1;
// RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside.
}