Přenositelnost hranicím ABI (moderní C++)
Používáte a dostatečně přenosné typy binární rozhraní hranicím."Přenosný typ" je vestavěný typ c nebo struktura, která obsahuje pouze c předdefinované typy.Typy tříd můžete použít, pouze pokud volající a volaný dohodnout na rozložení volání úmluvy atd. to je možné pouze při obou zkompilována stejného kompilátoru a nastavení kompilátoru.
Jak sloučit třídy pro přenositelnost c
Pokud volající může kompilována s kompilátorem nebo jazyka, pak "sloučit" na rozhraní API "extern C" s konkrétní konvence volání:
// 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”
}