Учитывая файл интерфейса, такой как:
%module test
%{
#include <vector>
%}
%include "std_vector.i"
%template(DoubleVector) std::vector<double>;
Самый простой способ добавить больше функциональности к DoubleVector
- написать его на C ++, в файле интерфейса SWIG, используя %extend
:
%extend std::vector<double> {
void bar() {
// don't for get to #include <iostream> where you include vector:
std::cout << "Hello from bar" << std::endl;
}
}
это имеет то преимущество, что оно будет работать для любого языка, на который вы нацелены SWIG, а не только для Python.
Вы также можете сделать это, используя %pythoncode
и несвязанную функцию :
%pythoncode %{
def foo (self):
print "Hello from foo"
DoubleVector.foo = foo
%}
Пример выполнения этого:
Python 2.6.7 (r267:88850, Aug 11 2011, 12:16:10)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> d = test.DoubleVector()
>>> d.foo()
Hello from foo
>>> d.bar()
Hello from bar
>>>