example.hpp
Code: Alles auswählen
#ifndef EXAMPLE_H
#define EXAMPLE_H
class Foo {
protected:
int value;
public:
double bar;
Foo(int value);
void set_value(int value);
int get_value();
};
#endif
Code: Alles auswählen
#include "example.hpp"
Foo::Foo(int value) {
this->value = value;
this->bar = 1.0;
}
void Foo::set_value(int value) {
this->value = value;
}
int Foo::get_value() {
return this->value;
}
Code: Alles auswählen
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.hpp"
%}
%include "example.hpp"
Dabei entstehen example.py und _example.so. Offensichtlich sind beide notwendig um das Modul example in Python zu importieren.swig -c++ -python example.i
g++ -fPIC -c example.cpp example_wrap.cxx -I/usr/include/python2.7/
g++ -shared example_wrap.o example.o -o _example.so
Code: Alles auswählen
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from example import Foo
>>> f = Foo(15)
>>> f.bar
1.0
>>> f.value
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "example.py", line 74, in <lambda>
__getattr__ = lambda self, name: _swig_getattr(self, Foo, name)
File "example.py", line 55, in _swig_getattr
raise AttributeError(name)
AttributeError: value
>>> f.get_value()
15
>>> f.set_value(12)
>>> f.get_value()
12
>>> f.set_value(12.4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "example.py", line 83, in set_value
def set_value(self, *args): return _example.Foo_set_value(self, *args)
TypeError: in method 'Foo_set_value', argument 2 of type 'int'
Was sagt ihr dazu, ist das so sinnvoll?
LG Glocke