使用Boost.Python,我似乎无法绑定任何返回const char *的函数:
class Bar
{
private:
int x;
public:
Bar():x(0){}
Bar(int x) : x(x) {}
int get_x() const { return x; }
void set_x(int x) { this->x = x; }
const char *get_str(){return "hello";}
};
BOOST_PYTHON_MODULE(internal_refs)
{
class_<Bar>("Bar")
.def("get_x", &Bar::get_x)
.def("set_x", &Bar::set_x)
.def("get_str", &Bar::get_str, return_internal_reference<>())
;
}
我收到以下错误:
/usr/local/include/boost/python/object/make_instance.hpp:27:9: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::mpl::or_<boost::is_class<char>, boost::is_union<char>, mpl_::bool_<false>, mpl_::bool_<false>, mpl_::bool_<false> >::************)’
答案 0 :(得分:3)
使用boost 1.50,我可以返回const char*
而无需指定CallPolicy。您收到的编译错误是静态断言,表明return_internal_reference
旨在用于类或联合的类型。在这种情况下,它既不是那些。
BOOST_PYTHON_MODULE(internal_refs)
{
class_<Bar>("Bar")
.def("get_x", &Bar::get_x)
.def("set_x", &Bar::set_x)
.def("get_str", &Bar::get_str)
;
}
python >>> from internal_refs import Bar >>> b = Bar() >>> b.get_str() 'hello' >>> type(b.get_str()) <type 'str'>