相关疑难解决方法(0)

has_field()方法如何与protobuf中的默认值相关联?

我正在尝试确定默认值与在各种编程接口中声明的has_foo()方法之间的关系.特别是,我试图确定在什么情况下(如果有的话)你可以"明确地设置为默认值的字段与未设置值之间的差异".

  1. 如果我明确地将字段(例如"Bar.foo")设置为其默认值(例如,零),那么Bar :: has_foo()保证为该数据结构返回true吗?(对于C++生成的代码,从快速检查看来似乎也是如此,但这并不意味着它得到保证.)如果这是真的,则可以区分显式设置的默认值和序列化之前的未设置.

  2. 如果我明确地将字段设置为其默认值(例如,零),然后序列化该对象并通过线路发送它,是否将发送该值?如果不是,那么显然任何接收此对象的代码都无法区分显式设置的默认值和未设置的值.即,在序列化之后将无法区分这两种情况 - 两种情况下, Bar :: has_foo()都将返回false.

如果无法区分,如果我想编码一个"可为空"的可选值,那么对protobuf字段进行编码的推荐技术是什么?我想到了几个选项,但看起来都不是很好:(a)添加一个额外的布尔字段来记录字段是否设置,或者(b)使用"重复"字段,即使我在语义上想要一个可选字段 - 通过这种方式,我可以区分无值(长度为零的列表)或设置值(长度为一的列表).

protocol-buffers

23
推荐指数
1
解决办法
2万
查看次数

标签 统计

protocol-buffers ×1