2017-04-16 42 views
0

基础上提出的主要贡献者flatbuffers为领域的一个非常好的方法:Flatbuffers:我可以更改int字段结构与1 int?

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

以获取一个整数字段为空默认情况下,最简单的方法是包装 它一个结构。如果标量不存在,这会让你为空。它 也不会占用更多的空间比普通的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到

换句话说,如果我以一个简单的int作为字段开始,我以后可以决定我实际上是否希望此int为空并将其更改为myint?我知道在第一个int模式中原来的默认值的所有值将在myint模式中读取为null,我对此表示满意。

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

回答

1

虽然没有明确记录,但是,intmyint是线格式兼容的(它们都以内联方式存储)。就像你说的,你将失去任何默认值实例变成null

+0

我的问题正是由于没有明确记录这一事实而激起的。 如果你想推测未来,你认为这种线格式的兼容性很可能会保持兼容,或者你的猜测是最有可能在某些时候会变得不兼容? –

+1

我想不出为什么它会变得不相容。关于FlatBuffers线格式的许多事情在这一点上都是毫无用处的,事实上结构与它们所拥有的标量相当的内存不会改变。 – Aardappel

相关问题