gpt4 book ai didi

c++ - 在不重新创建整个 FlatBuffers 的情况下使用(非对象)C++ API 时改变表数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:47 27 4
gpt4 key购买 nike

是否可以在不重新创建整个 FlatBuffers 的情况下使用 C++(非对象)API 来改变表数组?

这是我的架构示例

table Document {
root_layer:Layer;
bitmaps:[Bitmap];
subdocuments:[Document];
}

table Layer {
id:int;
sublayers:[Layer];
}

...

这里有趣的部分是document → root_layer → sublayers

假设我想修改整个子层数组:完全重写它,而不仅仅是替换索引处的元素。据我所知,可变性 API 只允许替换索引处的元素,而不是用新数组替换整个数组,对吧?

今天,我最终重新创建了整个文档,复制了原始文档中的所有字段,一旦我到达嵌套的 sublayers,我将其替换为新数组

有更好的方法吗?

最佳答案

不,不是真的。

使用反射 API,可以将新表附加到现有缓冲区,然后调整 vector (例如 sublayers)的大小,并使元素指向新(或旧)表。但目前没有办法删除旧表,API 使用起来非常痛苦,调整大小也很慢(复杂平面结构的就地突变很难)。

或者您可以从头开始创建一个新的缓冲区,如果您想避免自己为未修改的部分编写手动复制代码,您可以再次使用反射 API (CopyTable)或复制剩余部分的对象 API。

如果您发现您经常想要更改缓冲区的一部分而不是其余部分,也许..它们应该在 2 个不同的缓冲区中?

如果出于某种原因静态数据必须与动态数据放在同一个缓冲区中,一种方法是将静态数据放在 nested_flatbuffer 中,这样您就可以将其传输到新缓冲区单个 memcpy

平均而言,恐怕使用对象 API 是最好的选择。

关于c++ - 在不重新创建整个 FlatBuffers 的情况下使用(非对象)C++ API 时改变表数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com