无法绑定返回const char *的函数

时间:2012-06-18 14:52:21

标签: c++ boost boost-python

使用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> >::************)’

1 个答案:

答案 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'>