【发布时间】:2019-01-30 08:34:34
【问题描述】:
我正在使用 flatbuffers 序列化一堆类数据,使用来自 --gen-obj-api 的“native struct”API 来填充 flatbuffer 对象,因为它是我当前代码中最简单使用的对象,但我没有写作时同样关心速度。但是,在读取端进行反序列化时,我使用的是标准的 flatbuffer API,因为它不需要创建 C++ 对象,而且我可以直接使用指针来加快加载时间。
我的问题:
在写入端进行序列化时,我使用生成的 GeneratedClass::Pack() 方法来序列化本机结构及其所有子成员,但似乎没有办法以这种方式进行优化。我的意思是像 CreateSharedString、CreateVectorOfSortedTables 等调用。理想情况下,我希望自动完成这些优化,这样我就可以利用“类似地图”的功能按键查找元素并减少重复字符串名称的存储要求.有没有办法使用这些 Pack() API 来做到这一点?我认为可以通过在 Pack 调用之前对 std::vectors 进行排序来手动完成排序,但我看不到 SharedString 优化的任何方法。如果可以在 Pack 调用中设置一个标志来自动执行这些优化,那就太好了。
在反序列化期间重构 std::vector 时,如何从 flatbuffer::Vector 构造?我知道有迭代器,但 std::vectorbegin(), fbVec->end()) 不起作用,因为字符串类型是 flatbuffer 字符串,似乎没有办法使用 c_str() 轻松构建除非我手动循环字符串。
谢谢!
【问题讨论】:
-
请每个问题回答一个问题。代码通常比文字更善于描述代码,请阅读minimal reproducible example
标签: c++ flatbuffers