首页 > 解决方案 > 将 RepeatedPtrField 分配给 protobuf 消息中的重复字段

问题描述

我有一个RepeatedPtrField<M::Table>和一个 protobuf 消息 M 为:

message M {
  message Table {
    optional string guid = 1;
    optional int64 schema_version = 2;
    optional int64 data_version = 3;
    repeated Column column = 4;
  }
  repeated Table table = 1;
}

如何创建具有 RepeatedPtrField 内容的 M 实例。我可以编写一个 for 循环来显式复制数据,但我目前正在寻找更简洁的东西,最好使用std::move()类似优化。

标签: c++11protocol-buffersstdmove

解决方案


如果你使用的是新版本的 Protobuf,比如 Protobuf 3.6.0,RepeatedPtrField定义了移动构造函数,你可以调用std::move来实现你的目标。

如果您使用的是旧版本,您必须打电话Swap来完成这项工作,正如您在评论中提到的那样。


推荐阅读