Max Frai
Max Frai

Reputation: 64276

Extract base class pointer

I was told that I can extract reference to base class from any boost::python::object.

The simple code looks like:

// c++:
class Base {};

// Export Base into python module

// python:
class Der(Base):
   pass

//c++:
boost::python::object obj; // It points to some Der class object made from python
boost::shared_ptr<Object> temp = extract< boost::shared_ptr<Object> >(obj);

The last line fails with:

TypeError: No registered converter was able to produce a C++ rvalue of type boost::shared_ptr from this Python object of type Der

Is it possible to extract pointer for Base class?

Upvotes: 0

Views: 1557

Answers (1)

Max Frai
Max Frai

Reputation: 64276

So, using this thread I've managed out my question. First of all, my Base class was exported into python this way:

bp::class_<Base, boost::noncopyable>("Base", bp::no_init)

I had to remove bp::no_init. Why? Look at next update (the answer in stackoverflow post I gave before):

class Der(Base):
    def __init__(self):
        super(Der, self).__init__() # Add this!

That's it (:

Upvotes: 2

Related Questions