可以protobuf自动填充新创建的对象的默认值

时间:2014-04-19 07:06:38

标签: c++ protocol-buffers

我在使用google protobuf时遇到问题,我想创建一个具有默认属性值的对象:

message Obj {
    required string id = 1[default=123];
}

序列化上述对象时:

string s;
Obj obj;
obj.SerializeToString(&s);

它抱怨:无法序列化,因为它缺少必填字段ID

医生说"默认" value用于从字符串解析obj,而不是用于序列化为字符串。

是否可以使用默认值创建对象?

2 个答案:

答案 0 :(得分:3)

不,您无法设置内存中对象的默认值。

默认值仅在反序列化时应用。如果字段丢失,required会使读者出错。因此,requireddefault的组合毫无意义。

如果要设置内存默认值,请创建一个工厂函数并使用它。

答案 1 :(得分:2)

您无法序列化默认值,但可以将其设为可选字段。这样,当您对流进行反序列化时,您将获得一个缺少该字段的对象,并尝试获取该值将为您提供默认值。