扩展’不完整’类型(SWIG)

我正在寻找一种扩展方法(即使用%extend指令将新成员添加到类型中)一种在库文件本身中定义的类型,而库的头文件仅提供该类型的前向声明。

处理类型,就好像它的定义在编译时已知,会导致以下警告:

Warning 303: %extend defined for an undeclared class [name of the type]. 

是否有人知道此问题的解决方案或解决方法? 我确信有一个,因为SWIG的文档声明swig假定每次找到未知类型是结构或联合。

提前谢谢了!

通过在接口中为其提供空定义,您可以非常轻松地向SWIG中前向声明的类型添加额外的方法,例如

test.h:

 // Forward declare foo struct foo; 

test.i:

 %module test // Tell SWIG to wrap foo "properly", but that you don't know anything about it: struct foo { }; %include "test.h" %extend foo { void bar() { // Do stuff, probably with $self, here } } 

关键是在接口文件中你实际上并不是在正常意义上编写C或C ++,而是告诉SWIG要包装的每种类型的类型和部分。

因为您可能会依赖库来创建和销毁实例,您还需要添加:

 %nodefaultctor foo; %nodefaultdtor foo; 

在接口文件中抑制构造函数/析构函数生成并强制它通过库。