我的.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方法,但set
方法data
会员如何为每个对象设置cmd
的值?
我不想在Cmd
和CmdOne
消息中定义消息CmdTwo
。我希望重复使用Cmd
消息,因为我有10条消息CmdOne
到CmdTen
。
答案 0 :(得分: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);
另类,如果你想将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的
给出消息类型:
message Bar {}
对于以下任何一个字段定义:
optional Bar foo = 1; required Bar foo = 1;
编译器将生成以下访问器方法:
...
Bar* mutable_foo()
返回一个指向存储字段值的
Bar
对象的可变指针。如果在调用之前未设置字段,则返回的Bar
将不设置其字段(即,它将与新分配的Bar
相同)。调用此方法后,has_foo()
将返回true
,foo()
将返回对同一Bar
实例的引用。通过调用Clear()
或clear_foo()
使指针无效。...
void set_allocated_foo(Bar* bar)
将
Bar
对象设置为该字段,并释放前一个字段值(如果存在)。如果Bar
指针不是NULL
,则该消息将获得所分配的Bar
对象的所有权,has_foo()
将返回true
。否则,如果Bar
为NULL
,则行为与调用clear_foo()
相同。
答案 1 :(得分:0)
我认为最简单的方法是这样的:
if (isPlatformBrowser(this.platformId)) {
//your setTimeout here
}
答案 2 :(得分:-1)
Cmd my_command;
theCommand.set_code(5);
CmdOne cmd_one;
cmd_one.mutable_cmd().copyFrom(my_command);