protobuf列挙値は文字列への変換に対応する
1173 ワード
protobufの開発では、pbがjsonに移行し、jsonから対応するpbに移行する必要があることがよくあります.enum値には、値と文字列のマッピングのために反射が必要です.公式には対応する反射インタフェースが提供されています.
リンク:EnumValueDescriptorリンク:EnumDescriptor To get a EnumDescriptor To get the string value, use FindValueByNumber(int number)
example:
リンク:EnumValueDescriptorリンク:EnumDescriptor
To get the EnumDescriptor for a generated enum type, call TypeName_descriptor(). Use DescriptorPool to construct your own descriptors.
const EnumValueDescriptor * EnumDescriptor::FindValueByNumber(int number) const
Looks up a value by number.
Returns NULL if no such value exists. If multiple values have this >number,the first one defined is returned.
example:
enum UserStatus {
AWAY = 0;
ONLINE = 1;
OFFLINE = 2;
}
const google::protobuf::EnumDescriptor *descriptor = UserStatus_descriptor();
std::string name = descriptor->FindValueByNumber(UserStatus::ONLINE)->name();
int number = descriptor->FindValueByName("ONLINE")->number();
std::cout << "Enum name: " << name << std::endl;
std::cout << "Enum number: " << number << std::endl;