6.1 关于包装C++的注解

因其复杂性,C++与完全其他语言集成很困难,SWIG只提供对C++部分特征的支持,现在支持其大部分特性。

过去,包装C++的困难在于没有显式的语法(或自动的方法)将它映射到目标语言的高级特性上。比如,没法将C++的多重集成包装到目标语言中。同样,如果目标语言不支持,也很难映射操作符重载和方法重载。

C++的一个更微妙的问题与一些C++程序员考虑编程库的方式有关。在SWIG的世界里,你是在创建用于其他语言的二进制级别的软件组件。为了让其能够工作,一个”组件“必须包含真实的可执行指令,必须有某些访问其功能的二进制链接机制。相比之下,C++变得越来越依赖于泛型编程(generic programming)和模板编程(template programming)。尽管模板是一项很强大的特性,但它基本上与二进制组件和库的整个概念是正交的。比如,STL的vector不会定义任何类型的用于SWIG包装的二进制对象。更糟糕的是,某些库经常使用奇淫技巧做一些看似基本的操作(例如,指针解引用程序调用等)。尽管现在这些”魔术”在C++中不是问题,但在语言之间会带来很多问题,很可能会害死你自己。请务必小心。