Переносимость на границах API (современный C++)
Используйте достаточно переносимые типы и соглашения в диапазоне бинарных интерфейса. «Переносимый тип» тип " A " C. встроенную или структура, содержащая только встроенные типы C. Типы классов можно использовать только когда вызывающий и вызываемый объекты согласованное макет, соглашение о вызовах и т д это возможно только в том случае, если оба компилировались с параметром теми же компилятором и параметры компилятора.
Как сплющить класс для переноса кода C.
Когда вызывающие объекты можно компилировать с другим компилятором и язык, затем «сплющите» в API extern «C» с указанным соглашением о вызове.
// class widget {
// widget();
// ~widget();
// double method( int, gadget& );
// };
extern “C” { // functions using explicit “this”
struct widget; // + opaque type (fwd decl only)
widget* STDCALL widget_create(); // ctor → create new “this”
void STDCALL widget_destroy( widget* ); // dtor → consume “this”
double STDCALL widget_method( widget*, int, gadget* ); // method → use “this”
}