On 01/12/2011 12:06 PM, Matt Bendiksen wrote:
Thanks Jim, but I still cannot get it to work. I now have it defined as:

    def("get_a_or_b_instance", get_a_or_b_instance);
    class_<A, boost::shared_ptr<A>  >("A", init<>())
        ;
    class_<B, boost::shared_ptr<B>, bases<A>  >("B", init<>())
        ;

(note I change your example line from "bases<B>" to "bases<A>")


Yeah, that's correct.  Error on my part.

I tried it with and without:

    register_ptr_to_python<  boost::shared_ptr<B>  >();

But from Python whenever I call:

    type(app.get_a_or_b_instance(True))

I always get back:

    <class 'app.A'>

Any other ideas?


Yes. I just remembered that the downcasting only works if your classes are polymorphic; otherwise dynamic_cast (which is the underlying mechanism) doesn't work.

Adding a virtual destructor to the base class would be sufficient.

Jim



Matt
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to