如何获取字符串形式的协议枚举?

2022-03-09 00:00:00 enums protocol-buffers c++

是否可以在C++中获得等效于protocol buf枚举的字符串?

例如:

以下是消息说明:

package MyPackage;

message MyMessage
{
    enum RequestType
    {
        Login = 0;
        Logout = 1;
    }

    optional RequestType requestType = 1;
}

在我的代码中,我希望这样做:

MyMessage::RequestType requestType = MyMessage::RequestType::Login;

// requestTypeString will be "Login"
std::string requestTypeString = ProtobufEnumToString(requestType);

解决方案

EnumDescriptor和EnumValueDescriptor类可用于此类操作,并且 生成的.pb.h.pb.cc名称非常容易阅读,因此您可以查看它们以获得有关它们提供的功能的详细信息。

在此特定情况下,以下组件应该可以工作(未经测试):

std::string requestTypeString = MyMessage_RequestType_Name(requestType);

相关文章