在ABI边界(现代C++)的可移植性
在二进制接口边界处使用足够的可移植的类型和约定。 "可移植类型"是 C 的内置类型或包含仅 C 内置类型的结构。 调用方和被调用方同意在布局上,调用约定,等等时,可以只使用类类型.这种情况只有两个具有相同的编译器和编译器设置在编译时。
要平面化的类 C 可移植性的方法
当调用方可能会用另一种编译器/语言) 进行编译时,然后"拼合"到"外部 C"API 具有特定的调用约定:
// 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”
}