我是初学者。我有兴趣在Ubuntu机器上从Python调用C ++。
我刚刚开始在http://www.swig.org/tutorial.html
处观看入门教程。请考虑按如下所示复制该页面example.i
上的接口文件。
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
为什么在文件的后半部分重复%{ %}
之间的内容?如手册中所述,http://www.swig.org/Doc3.0/SWIGDocumentation.html#Introduction_nn5
%{%}块提供了用于插入其他代码的位置, 例如C头文件或其他C声明, 生成的C包装器代码。
但是在示例中它没有解决重复的问题。我想念什么?
答案 0 :(得分:2)
%{
和%}
之间的代码逐字插入到生成的SWIG包装器中,并用于使包装器代码访问列出的标头或声明。
这些标记之外的代码指示SWIG为列出的每个声明(或整个头文件)进行包装。
如果在第一部分中省略了extern int fact(int n);
,则包装器在编译并链接到包含该函数的源或库时,将无法访问该函数,因为缺少extern声明。如果不考虑第二部分的内容,则不会生成可从脚本语言访问的包装器。
有一个快捷方式:
%inline %{
...
%}
这指示SWIG插入和包装声明。