Converting shared_ptr<const T> fails
- 主要语言
- C++
- 星标
- 537
- 派生
- 223
- 平均合并
- 11 小时 22 分钟
- 30 天内合并 PR
- 2
描述
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?
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。