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

时间:2012-04-03 14:01:31

标签: c++ c interface swig language-binding

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

将类型视为在编译时已知其定义,将导致以下警告:

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

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

非常感谢提前!

1 个答案:

答案 0 :(得分:4)

通过在接口中为其提供空定义,您可以非常轻松地向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; 

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