"%include"和"#include"之间的区别

J T*_*J T 14 c c++ swig

在SWIG中,"%include"指令与标准C"#include"之间有什么区别?

例如,在所有教程中,为什么它们通常看起来像这样:

%module my_module

%{
#include "MyHeader.h"
%}

%include "MyHeader.h"
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是多余的.也许有知识的人可以澄清.

是否有一个包含C++代码的首选方法?

Nem*_*emo 18

这些东西%{ ... %}直接传递给输出; 它本身不是由SWIG解释的.因此,#include确保生成的C/C++代码包含该标头.

%include相比之下,是一个SWIG指令.它告诉SWIG在继续之前处理该头文件.这样,SWIG将了解(并生成包装)该头文件中声明的类型和函数.

如果标头非常复杂,它可能会混淆SWIG或导致非常大的输出(因为SWIG尝试为其中的所有内容生成包装器).在这种情况下,最好手动声明需要SWIG处理的标题部分,并省略%include.但是你仍然可能想要#include生成的C++来编译.

[更新]

至于"首选",SWIG更多的是关于什么比"首选"更有效...如果你有一个非常干净的头文件声明单个类的一个漂亮的接口,你可以只是%include它并让SWIG自动生成包装器.如果您的头文件非常多毛(例如iostream),您应该手动告诉SWIG要包装的内容.但是没有硬性规定.