¿Cómo envolver una función C ++ que devuelve boost :: opcional <T>?

Quiero ajustar una función que devuelve unboost::optional<T>. Es decir, dado:

class Foo {
    boost::optional<T> func();
};

Me gustaría terminar de alguna manera para que Python obtengaT por valor, oNone:

class_<Foo>("Foo")
    .def("func", func, return_value_policy<return_boost_optional???>);

Normalmente si solo devuelve unT, Podría usar:

class_<Foo>("Foo")
    .def("func", func, return_value_policy<return_by_value>());

Pero como devuelve unboost::optional<T>, también podría volverboost::none, que me gustaría terminar como PythonNone.

¿Hay alguna manera de hacer esto con los convertidores existentes? Si no, ¿hay alguna solución para lograr el mismo efecto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta