我在我的软件中使用地理库作为几何引擎。我目前正在使用它的capi(因为这是推荐的API)。
现在问题是我想序列化和反序列化struct GEOSGeometry。库本身是用c ++编写的,capi是它的包装器。所以结构定义不是每个人都可以使用的。我有什么选择?
这是capi提到的
/* When we're included by geos_c.cpp, those are #defined to the original
* JTS definitions via preprocessor. We don't touch them to allow the
* compiler to cross-check the declarations. However, for all "normal"
* C-API users, we need to define them as "opaque" struct pointers, as
* those clients don't have access to the original C++ headers, by design.
*/
#ifndef GEOSGeometry
typedef struct GEOSGeom_t GEOSGeometry;
这是它的包装方式
// Some extra magic to make type declarations in geos_c.h work -
// for cross-checking of types in header.
#define GEOSGeometry geos::geom::Geometry
感谢任何帮助。
答案 0 :(得分:0)
首先,如果你真的无法在源文件中访问struct
的定义,我会尝试使用C ++ 11 type_traits
类来检查它,例如is_pod
,is_trivial
,is_standard_layout
,...
通过这种方式,您可以了解您在处理什么。如果您看到struct
非常简单,您可以“希望”它将所有数据存储在自身内部,即不指向其他内存区域。可悲的是,据我所知,没有办法找出一个类是否有成员指针。
最终,您所能做的就是尝试将其粗略地序列化,写入输出sizeof(GEOSGeometry)
字节(char
s)。然后读回来......祝你好运!