1

给定一条看起来像这样的消息,

message Event {
    required int32 event_id = 1;

    oneof EventType {
        FooEvent foo_event = 2;
        BarEvent bar_event = 3;
        BazEvent baz_event = 4;
    }
}

我想定义另一个使用 EventType oneof 作为类型的地图。准确地说,我想定义这样的东西

message Sample {
    map<string, Event.EventTypeCase> someMap = 1;
}

但是,这是行不通的。我得到的错误是

PROTOC FAILED: "Event.EventTypeCase" is not defined.
4

1 回答 1

0

我想定义另一个使用 EventType oneof 作为类型的地图。

它不是 DSL 中的类型,所以:你不能。它是特定消息中字段的概念分组。的存在Event.EventTypeCase是一个实现细节,据我所知,它甚至没有在 DSL 规范中提到(尽管protoc如果您定义自己的名称enummessage使用相同的名称,可能会或可能不会检测到冲突)

于 2019-01-15T11:04:55.380 回答