使用协议缓冲区中的反射设置枚举值

时间:2016-10-19 14:02:49

标签: c++ c++11 enums protocol-buffers

我在.proto文件中有一个枚举Update update。我想在消息中使用 reflection 存储它。

refl->SetEnum (msg, fd , ???   );

???? - 应该是EnumValueDescriptor *(我不知道如何获得它)

我该怎么做?

我尝试了message_desc->FindEnumTypeByName(s)->FindValueByNumber(update)以获得许多不同的可能性:

UpdateType
UpdateType::CONFIRM
CONFIRM
....
.... 

1 个答案:

答案 0 :(得分:1)

第三个参数中需要的只是EnumValueDescriptor *。

另外正如您所看到的,您已在第二个参数中传递了FieldDescriptor。因此,只需使用FieldDesciptor :: enum_type()获取EnumDescriptor *,然后使用EnumDescriptor :: Value()获取EnumValueDescriptor。