1

如何在 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;
}

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

4

1 回答 1

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);

您可能需要阅读 Protocol Buffers 文档的 Fields 部分特别是Repeated Embedded Message Fields小节)。

于 2012-12-09T20:10:13.880 回答