Portabilidade em limites ABI

Use tipos e convenções suficientemente portáteis em limites de interface binária. Um "tipo portátil" é um tipo interno C ou um struct que contém apenas tipos internos C. Os tipos de classe só poderão ser usados quando o chamador e o computador chamado concordarem com o layout, a convenção de chamada etc. Isso só é possível quando ambos são compilados com o mesmo compilador e as mesmas configurações de compilador.

Como nivelar uma classe para portabilidade C

Quando os chamadores podem ser compilados com outro compilador/linguagem de programação, "nivele" para uma API "C" externa com uma convenção de chamada específica:

// class widget {
//   widget();
//   ~widget();
//   double method( int, gadget& );
// };
extern "C" {        // functions using explicit "this"
   struct widget;   // opaque type (forward declaration only)
   widget* STDCALL widget_create();      // constructor creates new "this"
   void STDCALL widget_destroy(widget*); // destructor consumes "this"
   double STDCALL widget_method(widget*, int, gadget*); // method uses "this"
}

Confira também

Bem-vindo outra vez ao C++
Referência da linguagem C++
Biblioteca Padrão do C++