我的.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文件中,我想声明
CmdOne
和CmdTwo
的对象,并设置cmd
和data
成员。但是生成的pb.h文件没有为cmd
和CmdOne
对象的CmdTwo
成员设置方法,但是为set
成员提供了data
方法。如何为每个对象设置cmd
的值?我不想在
Cmd
和CmdOne
消息中定义消息CmdTwo
。我想重用Cmd
消息,因为我有10条消息CmdOne
到CmdTen
。 最佳答案
您有几种不同的选择。您可以获取指向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的“单个嵌入式消息字段”部分中: