在SWIG中,"%include“指令和标准的C "#include”有什么区别?
例如,在所有教程中,为什么它们通常看起来像这样:
%module my_module
%{
#include "MyHeader.h"
%}
%include "MyHeader.h"这对我来说似乎是多余的。也许有知识的人可以解释清楚。
有没有包含C++代码的首选方法?
发布于 2011-06-09 05:07:28
%{ ... %}中的内容被直接传递到输出;它本身不是由SWIG解释的。因此,#include用于确保生成的C/C++代码包含该标头。
相比之下,%include是一个SWIG指令。它告诉SWIG在继续之前先处理头文件。通过这种方式,SWIG将了解该头文件中声明的类型和函数(并为其生成包装器)。
如果头部非常复杂,它可能会混淆SWIG或导致非常大的输出(因为SWIG试图为其中的所有内容生成一个包装器)。在这种情况下,最好只手动声明需要SWIG处理的头部部分,并省略%include。但是,为了编译生成的C++,您可能仍然需要#include。
更新
至于“首选”,SWIG更多的是关于什么是有效的,而不是什么是“首选”……如果你有一个非常干净的头文件,为一个单独的类声明了一个很好的接口,你可以简单地%include它并让SWIG自动生成包装器。如果你的头文件很乱(例如iostream),你应该手动告诉SWIG包装什么。但没有硬性规定。
发布于 2011-06-09 05:07:02
%include包含每个文件一次,这意味着您不需要包含保护。默认情况下,#include将被忽略,除非您使用-includeall选项运行SWIG。
此外,预处理器会忽略%{和%}之间的任何内容,并在不对输出进行任何修改的情况下进行复制。
更多你可以读到这个:http://www.swig.org/Doc1.3/Preprocessor.html。
https://stackoverflow.com/questions/6285212
复制相似问题