在C ++中填充重复的自定义协议缓冲区字段

时间:2012-12-07 13:12:22

标签: c++ protocol-buffers

如何在C ++中填充重复的自定义协议缓冲区字段?

示例协议缓冲区:

package protocol;
import "enumerations.proto";
option optimize_for=SPEED;

message UserCommandProtocol {
  required uint64 utcTime=1;
  required uint64 playerId=2;
  optional int32 targetId=3;
  optional int32 number=4;

  message pair {
      required float first = 1;
      required float second = 2;
  }

  repeated uint64 bucketId=5 [packed=true]; 
  repeated pair points=6;
  repeated pair backupPoints=7;

  required COMMANDS command=8;
  optional Type type=9;
  optional Orientation orientation=10;
  optional COMMANDS_PRIORITY priority=11;
}

我只有填充点的问题。在我的代码中,我有一个对象std::list<std::pair<float,float>> p,我想将这些值复制到UserCommandProtocol points

1 个答案:

答案 0 :(得分:3)

迭代添加每个对的列表。

UserCommandProtocol user_command;

// then, iterate over the list... for each element of the list do:

    std::list<std::pair<float,float>>::iterator it = ...; 

    pair* added_pair = user_command.add_points();
    added_pair->set_first(it->first);
    added_pair->set_second(it->second);

您可能需要阅读协议缓冲区文档中的Fields部分(特别是重复嵌入式消息字段小节)。