【问题标题】:original_order and Arrays in FlatBuffersFlatBuffers 中的 original_order 和数组
【发布时间】:2016-11-24 14:06:30
【问题描述】:

文档中提到了 original_order:

“original_order (on a table):由于表中的元素不需要以任何特定顺序存储,因此它们通常通过按大小排序来优化空间。这个属性阻止了这种情况的发生。”

我现在有点困惑。我认为 FlatBuffers 表类似于 C++ 中的数组,在我的代码中我没有看到任何问题。例如,我这样定义 LineString 几何:

table Vec2List {
    p:[Vec2];
}

table Linestring {
    points:Vec2List;
}

这行得通。虽然需要声明 original_order 吗?

来源:https://google.github.io/flatbuffers/md__schemas.html

【问题讨论】:

  • 这个问题和C++有什么关系?
  • 它被编译成 C++ 代码(structs 和 getter / setter),上面定义的表应该被视为 C++ struct defs 中的数组。

标签: c++ flatbuffers


【解决方案1】:

您不需要original_orderoriginal_order 影响 table 中字段的顺序。您的表格只有一个字段,因此无论如何它都没有效果。向量永远不会受到影响。我忘了为什么我们还有那个标志,在正常情况下没有用。

【讨论】:

  • 感谢您的澄清。我已经猜到它与对齐或类似的东西有关,但认为“表中的元素”是结构的对象实例而不是字段。但是字段重新排序不会导致意外行为,因为文档还说应该在最后添加字段以用于新版本的模式?当先前模式版本的“读者”尝试访问结构时,字段重新排序不会导致问题吗?
  • 架构中字段的顺序(或它们的 id)反映了二进制表示中 vtable 中字段的顺序。这个顺序确实必须保持一致。但是 vtable 然后指向实际的字段,这些字段可以在对象中以任何顺序进行序列化。 (这适用于表。结构没有 vtable,并且永远不能扩展或重新排序)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多