Freigeben über


Portabilität an ABI-Grenzen (Modern C++)

Portable Typen der Verwendung ausreichend und Konventionen an den binären Schnittstellengrenzen. Ein "besser portierbar Typ" ist Wechselstrom-integrierterDatentyp oder eine Struktur, die nur C-integrierteDatentypen enthält. Klassentypen können nur verwendet werden, wenn Aufrufer und Aufgerufenem über Layouts, Aufrufkonvention, usw. sich dann sind. Dies ist nur möglich, wenn beide denselben Compiler und Compilereinstellungen kompiliert werden.

Wie Sie eine Klasse für C-Portabilität vereinfacht

Wenn Aufrufer möglicherweise einen anderen Compiler/Sprache kompiliert werden, dann "vereinfachen Sie" zu einer API extern "C" mit einer bestimmten Aufrufkonvention:

// 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”
}

Siehe auch

Weitere Ressourcen

Willkommen zurück bei C++ (Modern C++)

C++-Sprachreferenz

C++-Standardbibliotheksreferenz