I\'m trying to get Boost Python to play nicely with std::shared_ptr. Currently, I\'m receiving this error:
Traceback (most recent call last):
File \"test.py\",
Unless I've misunderstood, I think this solves your problem:
boost::python::register_ptr_to_python<std::shared_ptr<Anchor>>();
http://www.boost.org/doc/libs/1_57_0/libs/python/doc/v2/register_ptr_to_python.html
Looks like boost::python doesn't support C++ 11 std::shared_ptr.
If you have a look to file boost/python/converter/shared_ptr_to_python.hpp you'll find implementation of template function shared_ptr_to_python(shared_ptr<T> const& x) for boost::shared_ptr (it explain why the code works fine for boost::shared_ptr).
I think you have several options:
There's a bug report for this: https://svn.boost.org/trac/boost/ticket/6545
Looks like someone is working on it.
A snippet from http://boost.2283326.n4.nabble.com/No-automatic-upcasting-with-std-shared-ptr-in-function-calls-td4573165.html:
/* make boost::python understand std::shared_ptr */
namespace boost {
template<typename T>
T *get_pointer(std::shared_ptr<T> p)
{
return p.get();
}
}
Worked for me. You would define your classes like:
class_<foo, std::shared_ptr<foo>>("Foo", ...);
With this, other methods returning std::shared_ptr<foo>
will Just Work.
Some magic may be required for virtual functions/polymorphism, that should be covered in the thread I linked to.