0

基于flatbuffers 的主要贡献者提出的针对空字段的非常好的方法:

https://github.com/google/flatbuffers/issues/333#issuecomment-155856289

为整数字段获取 null 默认值的最简单方法是将其包装在结构中。如果标量不存在,这将使您为空。它也不会比普通的 int 占用更多的空间。

struct myint { x:int; }
table mytable { scalar:myint; }enter code here

如果标量不存在,这将使您为空。它也不会比普通的 int 占用更多的空间。

同样基于 flatbuffers 文档:

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

一旦使用了字段类型,您就不能更改它们,但相同大小的数据除外,其中 reinterpret_cast 会给您一个理想的结果,例如,如果当前数据中没有值使用高值,您可以将 uint 更改为 int有点。

我的问题是我可以将int视为reinterpret_cast -able to myint吗?

换句话说,如果我只是从一个简单的 int 作为字段开始,我以后是否可以决定我实际上希望这个 int 可以为空并将其更改为 myint?我知道在第一个 int 模式中曾经是默认值的所有值在 myint 模式中都将被读取为null ,我可以接受。

当然,显而易见的后续问题是我可以对所有标量类型做同样的事情吗?

4

1 回答 1

1

虽然没有明确记录,是的,int并且myint是线格式兼容的(它们都内联存储)。就像您说的那样,您将失去任何默认值实例成为null.

于 2017-04-16T07:25:31.797 回答