Использование Boost Python & std :: shared_ptr

я пытаюсь заставить Boost Python хорошо играть с std :: shared_ptr. В настоящее время яЯ получаю эту ошибку:

Traceback (most recent call last):
  File "test.py", line 13, in 
    comp.place_annotation(circle.centre())
TypeError: No to_python (by-value) converter found for C++ type: std::shared_ptr

От вызова circle.centre (), который возвращает std :: shared_ptr. Я мог бы изменить каждый std :: shared_ptr на boost :: shared_ptr (с которым хорошо работает Boost Python), однако объем кода, который нужно изменить, довольно значительный, и яЯ хотел бы использовать стандартную библиотеку.

Метод круга объявлен так:

const std::shared_ptr centre() const
{
    return Centre;
}

Якорный класс, как это:

class Anchor
{
    Point Where;
    Annotation* Parent;
public:

    Anchor(Annotation* parent) :
        Parent(parent)
    {
        // Do nothing.
    }

    void update(const Renderer& renderer)
    {
        if(Parent)
        {
            Parent->update(renderer);
        }
    }

    void set(Point point)
    {
        Where = point;
    }

    Point where() const
    {
        return Where;
    }
};

И соответствующий код Boost Python:

class_("Circle", init())
.def("radius", &Circle::radius)
    .def("set_radius",  &Circle::set_radius)
    .def("diameter", &Circle::diameter)
    .def("top_left", &Circle::top_left)
    .def("centre", &Circle::centre);

// The anchor base class.
class_("Anchor", no_init)
    .def("where", &Anchor::where);

м с использованием Boost 1.48.0. Есть идеи?

Ответы на вопрос(4)

Ваш ответ на вопрос