2017-04-16 46 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

相關問題