是否可以在google protobuf中为类型(枚举或消息)定义别名?

时间:2013-07-08 18:30:11

标签: c++ enums protocol-buffers

我的proto文件中有两个枚举,它们定义了几乎相同的值。

是否可以删除其中一个并留下别名以保持所有代码正常工作?

示例:

enum A {
   a = 0;
   b = 1;
}
enum B {
   a = 0;
   b = 1;
}

我希望在c ++中有类似typedef的内容:

enum A {
   a = 0;
   b = 1;
}

typedef A B;

我在文档中没有找到这个。有没有解决方法?

2 个答案:

答案 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. }

即可启用别名选项