boostorg / boostorg/python

Converting shared_ptr<const T> fails

Aberta
#178 2 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
C++
Estrelas
537
Forks
223
Merge médio
11h 22min
PRs com merge (30d)
2

Descrição

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?

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.