给出基本的原型:
syntax = "proto3";
message Foo {
oneof cases {
bool a = 1;
bool b = 2;
// ...
}
}
我想清除cases
中的所有字段,使foo.cases_case() == CASES_NOT_SET
(在C ++中,不确定是否适用于其他语言)。以下[ugly]解决方法可以满足我的要求:
// Given Foo foo;
foo.set_a(false);
foo.clear_a();
我也可以清除所有情况,但是如果添加新的情况,这很容易出错:
foo.clear_a();
foo.clear_b();
// Oops, forgot foo.clear_c();
看一下生成的代码,有一个 private 方法完全可以实现我想要的功能,我不确定为什么无法公开它:Foo::clear_cases()
。是否有某些原因为什么不应该允许这样做,或者我可以在不依赖于设置/清除特定情况的情况下实现此目的的方式?