我有一个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。
我从互联网上读到,联合会至少产生类似struct MessageDataUnion
和createMessageDataDirect
之类的东西,但就我而言,它什么都不会产生,我的代码有什么问题吗? / p>
答案 0 :(得分:1)
您可以通过初始化data
中的Message
字段来创建联合。实际上,这会在C ++中生成两个字段data
和data_type
。因此,您不需要联合中已经包含的type
字段或MessageType
枚举。
您应该能够调用类似fbb.Finish(CreateMessage(fbb, MessageData_marketDate, CreateMarketDate(fbb, fbb.CreateString("my date"))))
(未经测试)之类的东西。