Protocol buffers 如何使用protobuffer中的反射设置消息的扩展字段
如何在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,则错
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;
}