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;
};
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to