Поделиться через


Переносимость на границах 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”
}

См. также

Другие ресурсы

Возвращение к C++ (современный C++)

Справочник по языку C++

Справочник по стандартной библиотеке C++