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

标签 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::Swap 代替 CopyFrom。不会使用顶级对象,但会使用其所有子对象(字符串、子消息等)。

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

关于c++ - 如何在 C++ 的 protobuf 中使用反射将预分配消息设置为字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19545615/

相关文章:

java - Protobuf "oneof"功能不工作

java - 如何用Java解析.pb文件?

c++ - 在命名空间 block 中定义类方法和使用::定义它们有什么区别?

c++ - 现代 OpenGL 立方体旋转无法按预期工作

c++ - 解码标志无法正常工作

c++ - 如何初始化 Protocol Buffer 中的重复元素?

c++ - 如何将共享库链接到 linux 中的其他共享库?

C++ 从 regex_iterator 获取匹配项

c++ - 在 C++ 中通过套接字发送 protobuf 的序列化是什么?

datetime - 在 Protocol Buffer 中使用小数和日期时间的最佳方法是什么?