2016-10-19 36 views
0

我在.proto文件中有Enum Update update。我想用的反饋在郵件中。使用協議緩衝區中的反射設置枚舉值

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

???? - 應該是EnumValueDescriptor *(我不知道如何得到它)

我該怎麼做?

我曾嘗試message_desc->FindEnumTypeByName(s)->FindValueByNumber(update)對於s的像許多不同的可能性:

UpdateType 
UpdateType::CONFIRM 
CONFIRM 
.... 
.... 
+1

你對你想設置的價值有什麼瞭解?見例如'Descriptor :: FindEnumValueByName'或'EnumDescriptor :: FindValueByName','FindValueByNumber'等 –

+0

我知道如何獲取Descriptor :: FindEnumValueByName。我只是有一個簡單的C++枚舉值''update'',我想設置它。 – v78

+0

我不確定我是否理解。你是什​​麼意思你「擁有」它?有什麼形式?什麼阻止你調用'Descriptor :: FindEnumValueByName'(它返回'EnumValueDescriptor *'),然後將它的返回值傳遞給'SetEnum'?我不太明白困難的性質。 –

回答

1

所有你的第三個參數需要的是EnumValueDescriptor *。

同樣,你可以看到你已經在第二個參數中傳遞了FieldDescriptor。因此,只需使用FieldDesciptor :: enum_type()獲取EnumDescriptor *,然後使用EnumDescriptor :: Value()獲取EnumValueDescriptor。