如何清除protobuf中的oneof案件?

时间:2018-12-11 01:45:58

标签: c++ protocol-buffers proto3

给出基本的原型:

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()。是否有某些原因为什么不应该允许这样做,或者我可以在不依赖于设置/清除特定情况的情况下实现此目的的方式?

0 个答案:

没有答案