boostorg / boostorg/python

Converting shared_ptr<const T> fails

Offen
#178 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
C++
Sterne
537
Forks
223
Ø Merge
11 Std. 22 Min.
Gemergte PRs (30 T.)
2

Beschreibung

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?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.