flatbuffer c++:是否可以从 flatbuffers::Vector 窃取
flatbuffer c++: Is it possible to steal from flatbuffers::Vector
我是 flatbuffer
的新手,我想知道是否可以完全(不是 const*)访问 flatbuffers::Vector
中的数据。查看下面的示例,我想窃取 img2::mem::data
的所有权以将其存储在 Img-struct
中并以我想要的任何方式处理它。如果没有 memcopy-ing,这在某种程度上是可能的吗?
struct Img
{
int iXCount;
int iYCount;
int iXOffset;
unsigned char *mem;
};
int _tmain(int argc, _TCHAR* argv[])
{
Img img;
//init img;
flatbuffers::FlatBufferBuilder fbb;
auto mem = fbb.CreateVector(img.mem, img.iXOffset * img.iYCount);
auto mloc = CreateImage(fbb, img.iXCount, img.iYCount, img.iXOffset, mem);
fbb.Finish(mloc);
//unpack
auto img2 = flatbuffers::GetRoot<Image>(fbb.GetBufferPointer());
const std::uint8_t*pMem = img2->mem()->data(); //unfortunately only const*
return 0;
}
您的 pMem
指向位于您正在使用的 FlatBuffer 中间某处的数据。所以这意味着您可以访问它,但前提是您可以保留父缓冲区。
由于这些是字节,您可以对它们进行常量转换,然后在不复制的情况下就地修改它们。请注意,如果您尝试使用非字节的东西进行此操作,则必须注意 FlatBuffer 中的数据始终是小端。
作为 const-cast 的替代方法,您可以使用 --gen-mutable
编译您的架构,这将为您提供额外的访问器以就地修改从 GetMutableRoot
开始的数据,并且 data() 也将是非常量。
我是 flatbuffer
的新手,我想知道是否可以完全(不是 const*)访问 flatbuffers::Vector
中的数据。查看下面的示例,我想窃取 img2::mem::data
的所有权以将其存储在 Img-struct
中并以我想要的任何方式处理它。如果没有 memcopy-ing,这在某种程度上是可能的吗?
struct Img
{
int iXCount;
int iYCount;
int iXOffset;
unsigned char *mem;
};
int _tmain(int argc, _TCHAR* argv[])
{
Img img;
//init img;
flatbuffers::FlatBufferBuilder fbb;
auto mem = fbb.CreateVector(img.mem, img.iXOffset * img.iYCount);
auto mloc = CreateImage(fbb, img.iXCount, img.iYCount, img.iXOffset, mem);
fbb.Finish(mloc);
//unpack
auto img2 = flatbuffers::GetRoot<Image>(fbb.GetBufferPointer());
const std::uint8_t*pMem = img2->mem()->data(); //unfortunately only const*
return 0;
}
您的 pMem
指向位于您正在使用的 FlatBuffer 中间某处的数据。所以这意味着您可以访问它,但前提是您可以保留父缓冲区。
由于这些是字节,您可以对它们进行常量转换,然后在不复制的情况下就地修改它们。请注意,如果您尝试使用非字节的东西进行此操作,则必须注意 FlatBuffer 中的数据始终是小端。
作为 const-cast 的替代方法,您可以使用 --gen-mutable
编译您的架构,这将为您提供额外的访问器以就地修改从 GetMutableRoot
开始的数据,并且 data() 也将是非常量。