Boost.Python: Cómo exponer std :: unique_ptr

Soy bastante nuevo en boost.python y estoy tratando de exponer el valor de retorno de una función a python.

La firma de la función se ve así:

 std::unique_ptr<Message> someFunc(const std::string &str) const;

Al llamar a la función en Python, aparece el siguiente error:

TypeError: No to_python (by-value) converter found for C++ type: std::unique_ptr<Message, std::default_delete<Message> >

Mi llamada de función en python se ve así:

a = mymodule.MyClass()
a.someFunc("some string here") # error here

Intenté exponer std :: unique_ptr pero no puedo hacer que funcione. ¿Alguien sabe cómo exponer correctamente la clase de puntero? ¡Gracias!

Editar: Intenté lo siguiente:

class_<std::unique_ptr<Message, std::default_delete<Message>>, bost::noncopyable ("Message", init<>())

;

Este ejemplo compila, pero todavía me sale el error mencionado anteriormente. Además, traté de exponer la clase.Message sí mismo

class_<Message>("Message", init<unsigned>())

        .def(init<unsigned, unsigned>()) 
        .def("f", &Message::f)
;

Respuestas a la pregunta(4)

Su respuesta a la pregunta