How to do inheritance in boost.python?
I have this: #include <boost/python.hpp> #include <iostream> using namespace boost::python; using namespace std; class Base { public: virtual ~Base() { } virtual int f() = 0; }; class BaseWrap: public Base, public wrapper<Base> { public: int f() { return this->get_override("f")(); } }; BOOST_PYTHON_MODULE(hello) { class_<BaseWrap, boost::noncopyable>("Base") .def("f", pure_virtual(&Base::f)) ; } Module compiles ok into hello.so. But then I do in Python:
import hello base = Base(); Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'Base' is not defined class Derived(Base): ... def f(self): ... return 42; ... Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'Base' is not defined
What's wrong with the code? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Also, here's a code with not pure virtual func: #include <boost/python.hpp> #include <iostream> using namespace boost::python; using namespace std; class Base { public: virtual ~Base() { } virtual int f() { return 0; } }; class BaseWrap: public Base, public wrapper<Base> { public: int f() { if (override f = this->get_override("f")) return f(); return Base::f(); } int default_f() { return this->Base::f(); } }; BOOST_PYTHON_MODULE(hello) { class_<BaseWrap, boost::noncopyable>("Base") .def("f", &Base::f, &BaseWrap::default_f) ; } And in Python I get the same error that Base isn't defined. Thanks.
participants (2)
-
michael kapelko -
Piotr Jaroszynski