Protobuf消息构造函数

时间:2017-10-17 12:40:55

标签: python c++ protocol-buffers

据我所知,在编译* .proto文件时,生成的类没有构造函数,也没有复制/移动构造函数。 例如,如果我有

message Float3Vector{
    optional float x = 1;
    optional float y = 2;
    optional float z = 3;
}

我无法致电Float3Vector(my_x, my_y, my_z)documentation

也很清楚

到目前为止一切顺利。还有其他方法。 我的问题是,有这样做的特殊原因吗?我的意思是,有一个技术原因(即由序列化,生成代码等决定)使这不可能?

2 个答案:

答案 0 :(得分:2)

似乎有一种未记录的方式来执行此操作。我觉得这很烦人,难以构造protobuf消息。

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

这意味着您还可以执行以下操作:

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

see this了解更多信息。

答案 1 :(得分:1)

复制已被故意禁用。对于大型protobufs,复制是昂贵的,并且为了防止意外复制,选择使CopyFrom()显式。

当C ++ 11到来时,不需要移动并忽略了移动。下一个protobuf版本可能已包括在内。