我在使用google protobuf时遇到问题,我想创建一个具有默认属性值的对象:
message Obj {
required string id = 1[default=123];
}
序列化上述对象时:
string s;
Obj obj;
obj.SerializeToString(&s);
它抱怨:无法序列化,因为它缺少必填字段ID
医生说"默认" value用于从字符串解析obj,而不是用于序列化为字符串。
是否可以使用默认值创建对象?
答案 0 :(得分:3)
不,您无法设置内存中对象的默认值。
默认值仅在反序列化时应用。如果字段丢失,required
会使读者出错。因此,required
和default
的组合毫无意义。
如果要设置内存默认值,请创建一个工厂函数并使用它。
答案 1 :(得分:2)
您无法序列化默认值,但可以将其设为可选字段。这样,当您对流进行反序列化时,您将获得一个缺少该字段的对象,并尝试获取该值将为您提供默认值。