Protobuf消息构造函数

3
据我所知,当编译 *.proto 文件时,生成的类没有构造函数或复制/移动构造函数。例如,如果我有:
message Float3Vector{
    optional float x = 1;
    optional float y = 2;
    optional float z = 3;
}

我无法调用Float3Vector(my_x, my_y, my_z)。这在文档中也很明确。
到目前为止一切都好。提供了其他方法。我的问题是,是否有特定的原因做这个?我的意思是,有没有技术上的原因(即由序列化、生成代码等决定)使这个不可能?
2个回答

3

似乎有一种未记录的方法可以做到这一点。我发现构造protobuf消息太难了,让人感到很烦恼。

Float3Vector(x=my_x, y=my_y, z=my_z)

这意味着您也可以做类似以下的事情:

pb_args = {'x':1, 'y':2, 'z':3}
Float3Vector(**pb_args)

点击此处 查看更多信息。


位置参数不被允许,因为根据protobufs的设计,消息字段没有按任何特定方式排序,否则会产生歧义。但这就是为什么关键字参数是可以的。 - alkasm

1

复制被故意禁用了。对于大的protobuf来说,复制是昂贵的,并且为了防止意外复制,选择使CopyFrom()变得明确。

当C++11到来时,移动是不必要的并被忽略了。下一个protobuf版本可能会包括移动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接