boostorg / boostorg/python

Converting shared_ptr<const T> fails

Abierto
#178 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
537
Forks
223
Merge medio
11 h 22 min
PR fusionados (30 d)
2

Descripción

Boost Python (1.63) works well with `shared_ptr`; if I write this in C++:

shared_ptr create_shared_ptr() { return shared_ptr{...}; }
void accept_shared_ptr(const shared_ptr& p) { }

...

class_("Foo", no_init); //Expose abstract class

register_ptr_to_python< shared_ptr >();
def("create_shared_ptr", create_shared_ptr);
def("accept_shared_ptr", accept_shared_ptr);

Then I can write this in Python and everything works:

accept_shared_ptr(create_shared_ptr())

**The problem comes when I try and wrap `shared_ptr`.** (Which I need to do because I am wrapping a library that returns this.) If I modify the C++ functions as follows:

shared_ptr create_shared_ptr() { return shared_ptr{...}; }
void accept_shared_ptr(const shared_ptr& p) { }

Then I get the error:

> Boost.Python.ArgumentError: Python argument types in
> w3w_python.accept_shared_ptr(Foo)
> did not match C++ signature:
> accept_shared_ptr(std::shared_ptr)

It seems the internals are implementing conversion from python `Foo` to C++ `shared_ptr`, but not to C++ `shared_ptr`. Using

register_ptr_to_python< shared_ptr >();

doesn't help. How can I fix this?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.