Сериализация структуры, определение которой неизвестно

Я использую библиотеку Geos в своем программном обеспечении в качестве движка геометрии. В настоящее время я использую его Capi (так как это рекомендуемый API).

Теперь проблема в том, что я хотел бы сериализовать и десериализовать структуру GEOSGeometry. Сама библиотека находится на с ++, а 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

Любая помощь приветствуется.

2

Решение

Прежде всего, если вы действительно не можете получить доступ structопределение в исходном файле, я бы попробовал проверить его с помощью C ++ 11 type_traits классы, например is_pod, is_trivial, is_standard_layout

Таким образом, вы можете понять, с чем имеете дело. Если вы видите, что struct это довольно просто, вы можете «надеяться», что он хранит все данные внутри себя, то есть не указывает на другие области памяти. К сожалению, насколько я знаю, нет способа узнать, есть ли у класса указатель на член.

В конце концов, все, что вы можете сделать, это попытаться сериализовать это, жестоко записывая в ваш вывод sizeof(GEOSGeometry) байты (charс). Тогда прочитайте это назад и … удачи!

0

Другие решения


По вопросам рекламы [email protected]