Protocol buffers 如何使用protobuffer中的反射设置消息的扩展字段

Protocol buffers 如何使用protobuffer中的反射设置消息的扩展字段,protocol-buffers,Protocol Buffers,如何在protobuffer中设置消息的扩展字段?代码如下所示: message Header { optional string name = 1; extensions 2 to 10; } message PbDirectiveHeader { extend Header { optional string message_id = 2; } } 如果我使用反射设置标题消息的名称字段,则没有错误,但如果我转到设置消息的扩展字段_id,则错

如何在protobuffer中设置消息的扩展字段?代码如下所示:

message Header {
    optional string name = 1;
    extensions 2 to 10; 
}
message PbDirectiveHeader {
    extend Header {
        optional string message_id = 2;
    }
}

如果我使用反射设置标题消息的
名称
字段,则没有错误,但如果我转到设置
消息的扩展字段_id
,则错误再次发生。如何解决我的问题?

我找到了解决问题的方法

    PbDirectiveHeader header_msg;
    Header header;
    std::cout << "header_msg des : " << header_msg.GetDescriptor() << std::endl;
    const google::protobuf::FieldDescriptor* message_id_dec = header_msg.GetDescriptor()->FindExtensionByName("message_id");
    if (message_id_dec != nullptr) {
        std::cout << "header_msg message_id's des containing_type: " << message_id_dec->containing_type() << std::endl;
        header.GetReflection()->SetString(&header, message_id_dec, "123456");
        std::cout << "message_id:" << header.GetReflection()->GetString(header, message_id_dec) << std::endl;
    } else {
        std::cout << "headermessage_id des is nullptr" << std::endl;
    }
PbDirectiveHeader\u msg;
收割台;

我能找到解决问题的办法吗

    PbDirectiveHeader header_msg;
    Header header;
    std::cout << "header_msg des : " << header_msg.GetDescriptor() << std::endl;
    const google::protobuf::FieldDescriptor* message_id_dec = header_msg.GetDescriptor()->FindExtensionByName("message_id");
    if (message_id_dec != nullptr) {
        std::cout << "header_msg message_id's des containing_type: " << message_id_dec->containing_type() << std::endl;
        header.GetReflection()->SetString(&header, message_id_dec, "123456");
        std::cout << "message_id:" << header.GetReflection()->GetString(header, message_id_dec) << std::endl;
    } else {
        std::cout << "headermessage_id des is nullptr" << std::endl;
    }
PbDirectiveHeader\u msg;
收割台;
标准::cout
    PbDirectiveHeader header_msg;
    Header header;
    std::cout << "header_msg des : " << header_msg.GetDescriptor() << std::endl;
    const google::protobuf::FieldDescriptor* message_id_dec = header_msg.GetDescriptor()->FindExtensionByName("message_id");
    if (message_id_dec != nullptr) {
        std::cout << "header_msg message_id's des containing_type: " << message_id_dec->containing_type() << std::endl;
        header.GetReflection()->SetString(&header, message_id_dec, "123456");
        std::cout << "message_id:" << header.GetReflection()->GetString(header, message_id_dec) << std::endl;
    } else {
        std::cout << "headermessage_id des is nullptr" << std::endl;
    }