Nan*_*ani 11 c++ protocol-buffers
我的.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;
}
Run Code Online (Sandbox Code Playgroud)
在我的cpp文件中,我想声明CmdOne和的对象,CmdTwo并设置它们cmd和data成员.但生成的pb.h文件没有cmd成员CmdOne和CmdTwo对象的set方法,但有成员的set方法data.如何设置cmd每个对象的值?
我不想在Cmd里面定义消息CmdOne和CmdTwo消息.我想重用Cmd,因为我有10条消息消息CmdOne来CmdTen.
Fra*_*ser 19
你有几个不同的选择.您可以获得指向该cmd字段的非const指针,然后适当地分配值:
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);
Run Code Online (Sandbox Code Playgroud)
Alternativey,如果你想传递的构建的实例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'
Run Code Online (Sandbox Code Playgroud)
从文档的"Singular Embedded Message Fields"部分:
给定消息类型:
Run Code Online (Sandbox Code Playgroud)message Bar {}对于以下任一字段定义:
Run Code Online (Sandbox Code Playgroud)optional Bar foo = 1; required Bar foo = 1;编译器将生成以下访问器方法:
...
Run Code Online (Sandbox Code Playgroud)Bar* mutable_foo()返回指向
Bar存储字段值的对象的可变指针.如果在调用之前未设置字段,则返回Bar的字段将不设置其字段(即,它将与新分配的字段相同Bar).调用此之后,has_foo()将返回true并foo()会返回一个参考的同一个实例Bar.通过调用Clear()或使指针无效clear_foo()....
Run Code Online (Sandbox Code Playgroud)void set_allocated_foo(Bar* bar)将
Bar对象设置为字段并释放先前的字段值(如果存在).如果Bar指针不是NULL,则消息将获得已分配Bar对象的所有权has_foo()并将返回true.否则,如果Bar是NULL,则行为与调用相同clear_foo().