扩展’不完整’类型(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;
在接口文件中抑制构造函数/析构函数生成并强制它通过库。