6.2 方式与方法

SWIG使用分层的方法包装C++并生成代码。在最底层,SWIG生成了一组ANSI C样式的过程式包装函数。这些函数会处理基础类型转换、类型检查、错误处理和其他C++底层的绑定事宜。它们还尽力将C++的特性绑定到目标语言的内置过程中。在一些场景中,你可以查看这一层将C库映射至C++的包装代码。在底层接口过程的最上层,SWIG生成了代理类,它会提供更自然的面向对象的接口,并在其中使用这些底层的代码。代理类基本都使用目标语言本身实现。比如,在 Python中,会使用真实的Python类包装底层的C++对象。

需要特别强调地是,SWIG使用了经过深思熟虑的装换方法和非侵入式的方式包装C++代码。SWIG不会使用特殊的C++适配器类来包装C++类,不依赖于模板,也不会添加额外的C++继承。最后意见需要注意的事是,多数的C++程序需要更多的编译器魔法。因此,SWIG会尽力在C++程序和包装代码之间维护一个非常严格的、清爽的隔离层。你可能会说,SWIG遵循最小惊讶原则——它不会在C++系统中玩鬼鬼祟祟的把戏,不会弄乱类继承,不会引入新的语义。尽管这些可能不会带来对C++的无缝继承、但是它更安全、更简单、可移植且可调试。

本章的其他部分将聚焦C++绑定的底层过程接口,它是所有语言模块的基础。记住一点,目标语言还提供了高层的面相对象的代理对象接口。更多的信息可在各自目标语言的章节查询。