Boost.Python暴露const std::string&属性时出现未注册C++类错误的求助
Boost.Python暴露const std::string&属性时出现未注册C++类错误的求助
各位好,我最近在用Boost.Python把C++类封装给Python时碰到了一个棘手的问题,想请大家帮忙分析下。
我知道std::string可以通过隐式转换器直接暴露给Python,不需要手动注册,但const std::string&好像没这么省心。
我的C++类定义是这样的:
class Cal { const std::string& get_name() const; };
对应的Boost.Python注册代码如下:
namespace bp=boost::python; bp::class_<Cal, Cal*>("Cal") .add_property("name", make_function(&Cal::get_name, bp::return_value_policy<bp::reference_existing_object>()));
另外我还注册了const Cal*的转换器:
bp::to_python_converter<const Cal*, Cal_ptr_to_python_obj>{};
可当我在Python里调用:
cal.name
时,却弹出了这个错误:
No Python class registered for C++ class std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
这就让我搞不懂了,毕竟std::string的转换器应该是隐式注册好的啊。我试着手动注册const std::string&的转换器,结果编译直接失败——Boost.Python的代码试图取const std::string&的指针,然后触发了“pointer to reference”的断言错误。
有没有大佬能指点下这问题出在哪,该怎么解决呢?
备注:内容来源于stack exchange,提问作者MMM
相关产品推荐
相关产品推荐

