[C++-sig] instantiate python classes in c++
Gregor Burger
Gregor.Burger at uibk.ac.at
Mon Mar 30 17:55:34 CEST 2009
hi all,
is it possible to use boost.python to define classes
in a script (like in the one below), register the defined
classes and later on create instances of the class?
from cd3 import *
class MyNode(Node):
def init(self, start, stop, dt):
in_flow = Flow()
self.addInPort(in_flow)
def f(self, time, dt):
return dt
register_node(MyNode)
registering of the class is working also instantiating
the class. but it seems that when i call init(...) and f(...)
afterwards the namespace and all imports are lost. so
in_flow = Flow() raises an global name Flow undefined. The wrapping
of Flow works on first execution.
Is it possible to provide the same globals and locals to call_method
so that Flow and other classes are defined?
thanks in advance.
gregor burger
university of innsbruck
the wrapped Node looks like this:
struct NodeCallback : Node {
NodeCallback(PyObject *p) : self(p) {
Py_INCREF(self);
}
virtual ~NodeCallback() {
Py_DECREF(self);
}
void init(int start, int stop, int dt) {
call_method<void, int, int, int>(self, "init", start, stop, dt);
}
int f(int time, int dt) {
return call_method<int, int, int>(self, "f", time, dt);
}
void addInPort(object o) {
std::string name = extract<std::string>(o.attr("__name__"));
std::cout << "adding in port " << name << std::endl;
}
PyObject *self;
};
More information about the Cplusplus-sig
mailing list