Учитывая этот основной прото:
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()
, Есть ли какая-то причина, почему это не должно быть разрешено, или способ, которым я могу сделать это, не завися от конкретного случая, чтобы установить / очистить?
Задача ещё не решена.
Других решений пока нет …