0

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

1 に答える 1

3

const char*boost 1.50 では、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)
      ;
}
パイソン
>>> internal_refsインポートバーから
>>> b = バー()
>>> b.get_str()
'こんにちは'
>>> タイプ(b.get_str())
<type 'str'>
于 2012-06-21T17:41:49.630 に答える