如何在C ++上的protobuf中使用反射将预分配的消息设置为字段?

时间:2013-10-23 15:11:35

标签: c++ protocol-buffers

我有这样的代码:

TestMessage* output;
::google::protobuf::Message* input;
// ...
auto extension_field = input->GetDescriptor()->extension(i);
// ...
auto reflection = output->GetReflection();
reflection->MutableMessage(output, extension_field)->CopyFrom(*input);

此代码接收两条消息,检查一条是另一条消息的扩展,将输入消息复制到输出消息的相应扩展字段。

我想优化它 - 并用“移动”替换复制。如何使用reflection

进行操作

1 个答案:

答案 0 :(得分:2)

您最接近的是使用Reflection::Swap代替CopyFrom。顶级对象不会被使用,但它的所有子对象(字符串,子消息等)都将被使用。

auto msg = reflection->MutableMessage(output, output_field);
msg->GetReflection()->Swap(msg, input);
delete input;