结构体只能包含标量或其他结构体。但据我所知,当将向量/表/字符串字段写入表数据时,仅将偏移量写入缓冲区(向量/表/字符串的数据在表数据之前写入)。因此包含向量/表/字符串字段的结构仍然可以具有固定大小。为什么 Flatbuffer 会限制结构体只能包含标量或其他结构体?
a 背后的想法struct是,它是一块独立的内存,始终具有相同的布局和大小,因此可以轻松地自行复制,特别是在原生支持此类类型的语言中,例如 C/C++/Rust 等。
如果它可以包含字符串,那么它至少是两块内存,它们的距离和大小都是可变的,因此复制效率不高且易于管理。table对于这样的情况我们有。
如果您必须在 a 中包含向量或字符串struct,则某些语言已经支持固定长度的“数组”类型。您可以将其加上结构中的长度字段来模拟向量和字符串,当然缺点是为它们分配的空间始终相同。