Вы можете очень легко добавить дополнительные методы к типу, который был заранее объявлен в 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;
в файле интерфейса для подавления генерации конструктора / деструктора изаставить его пройти через библиотеку.