我的.proto文件看起来像

message Cmd
{
      int code =  1;
}

message CmdOne
{
      required Cmd cmd = 1;
      required int data = 2;
}

message CmdTwo
{
      required Cmd cmd = 1;
      required string data = 2;
}

在我的cpp文件中,我想声明CmdOneCmdTwo的对象,并设置cmddata成员。但是生成的pb.h文件没有为cmdCmdOne对象的CmdTwo成员设置方法,但是为set成员提供了data方法。如何为每个对象设置cmd的值?

我不想在CmdCmdOne消息中定义消息CmdTwo。我想重用Cmd消息,因为我有10条消息CmdOneCmdTen

最佳答案

您有几种不同的选择。您可以获取指向cmd字段的非常量指针,然后适本地分配值:

CmdOne cmd_one;
Cmd* cmd(cmd_one.mutable_cmd());
cmd->set_code(2);
// Previous 2 lines could be simplified to:
// cmd_one.mutable_cmd()->set_code(2);

或者,如果要将构造的Cmd实例传递给CmdOne,则可以执行以下操作:
Cmd* cmd(new Cmd);
cmd->set_code(1);

CmdOne cmd_one;
cmd_one.set_allocated_cmd(cmd);  // Takes ownership of cmd -
                                 // you don't call 'delete cmd'

the docs的“单个嵌入式消息字段”部分中:

09-05 06:46