Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Converting shared_ptr<const T> fails

Aberta
#178 2 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
cpp
Domínio
tooling

Direção de pesquisa

Comece reproduzindo os bindings C++ mostrados com create_shared_ptr, accept_shared_ptr e register_ptr_to_python usando shared_ptr. Rastreie o caminho de conversão do Boost.Python para o tipo de destino const; está concluído quando o Foo do Python retornado por create_shared_ptr é aceito por accept_shared_ptr sem ArgumentError.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

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

...

class_<Foo, boost::noncopyable>("Foo", no_init); //Expose abstract class

register_ptr_to_python< shared_ptr<Foo> >();
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<const Foo>. (Which I need to do because I am wrapping a library that returns this.) If I modify the C++ functions as follows:

shared_ptr<const Foo> create_shared_ptr() { return shared_ptr{...}; }
void accept_shared_ptr(const shared_ptr<const Foo>& 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<Foo const>)

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

register_ptr_to_python< shared_ptr<const Foo> >();

doesn't help. How can I fix this?

Linguagem predominante
C++
Estrelas
537
Forks
223
Merge médio
11h 22min
PRs com merge (30d)
2

Guia de contribuição

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

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de boostorg/python

Todas as issues de boostorg/python

Issues semelhantes

Mais issues de C++

Receba novas issues na sua caixa de entrada

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