Protobuf 消息构造函数

Protobuf Message Constructor

据我所知,在编译 *.proto 文件时生成的 class 没有构造函数,也没有 copy/move 构造函数。 例如,如果我有

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

我不能打电话给 Float3Vector(my_x, my_y, my_z)。从 documentation.

中也可以清楚地看出这一点

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

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

在 C++ 11 到来时,不需要移动并且被忽略了。下一个 protobuf 版本可能包含移动。

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

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

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

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

see this 了解更多信息。