flatbuffer unio генерирует только enum - PullRequest
0 голосов
/ 15 марта 2019

У меня есть файл схемы flatbuffer:

namespace market;

enum MessageType : ubyte {
    Null = 0,
    MarketDate = 1,
    MarketInfo,
}

table MarketDate {
    date           : string;
}

table MarketInfo {
        marketID           : string;
        marketName         : string;
        marketType         : byte;
}

union MessageData {
    marketDate           :     MarketDate,
    marketInfo           :     MarketInfo,
}

table Message {
    type        : MessageType;
    data        : MessageData;
}

root_type Message;

Когда я генерирую файлы доступа для c ++, с

flatc -c --scoped-enums market.fbs

В выводе нет кода для построения и хранения MessageData, он генерирует только перечисление. Сгенерированный market_generated.h находится на http://sprunge.us/lTfX0H.

Я прочитал из интернета, что union может генерировать, по крайней мере, что-то вроде: struct MessageDataUnion и createMessageDataDirect или подобное, но в моем случае это не генерирует ничего подобного, что-то не так с моим кодом?

1 Ответ

1 голос
/ 15 марта 2019

Объединение создается путем инициализации поля data в Message. Это фактически генерирует два поля в C ++, data и data_type. Таким образом, вам не нужно ни поля type, ни перечисления MessageType, которое уже включено в объединение.

Вы должны быть в состоянии вызвать что-то вроде fbb.Finish(CreateMessage(fbb, MessageData_marketDate, CreateMarketDate(fbb, fbb.CreateString("my date")))) (не проверено).

...