Учитывая это базовое прото:
syntax = "proto3";
message Foo {
oneof cases {
bool a = 1;
bool b = 2;
// ...
}
}
Я бы хотел очистить все поля в cases
, чтобы foo.cases_case() == CASES_NOT_SET
(в C ++, не уверен, доступно ли это для других языков).Следующий [некрасивый] обходной путь делает то, что я хочу:
// Given Foo foo;
foo.set_a(false);
foo.clear_a();
Я также могу очистить все случаи, но это может привести к ошибкам при добавлении новых случаев:
foo.clear_a();
foo.clear_b();
// Oops, forgot foo.clear_c();
Просмотр сгенерированногоВ коде есть приватный метод, который делает именно то, что я хочу, и я не уверен, почему он не может быть выставлен: Foo::clear_cases()
.Есть ли какая-то причина, почему это не должно быть разрешено, или способ, которым я могу сделать это, не завися от конкретного случая, чтобы установить / очистить?