我有以下类:
#include <array>
template<unsigned short D>
class Point {
private:
std::array<float, D> coordinates;
public:
Point() { for(int i=D-1; i>=0; --i) coordinates[i] = 0.0; }
Point(const Point& rhs) = default;
Point& operator=(const Point& rhs) = default;
~Point() = default;
float& get_ref(const unsigned short dimension)
{ return coordinates[dimension-1]; }
};
我试图用把它包起来:
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(fernpy) {
using namespace boost::python;
class_< Point<2> >("point")
.def("__call__", &Point<2>::get_ref, return_internal_reference<>());
}
我用gcc-4.7编译升压1.48,蟒蛇 - 2.7在Fedora 17中的所有代码是一个名为testpy.cpp文件。 我使用这些命令编译:
g++ -std=c++11 -g -fPIC -I/usr/include/python2.7 -c testpy.cpp
g++ -shared -g -lpython2.7 -lboost_python -o libfern.so testpy.o
编译器返回一串提高内部的错误,太多在这里发表。 本文节选似乎是它的核心。 还有它和“手册” S前后的“从要求”一堆。
/usr/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<float>, boost::is_union<float>, mpl_::bool_<false>, mpl_::bool_<false>, mpl_::bool_<false> >::************)’
如果我返回来自get_ref纯浮子和除去return_internal_reference从包装物的.DEF线<>()参数它工作得很好。 这很奇怪,因为我在做另一个,更复杂的类模板同样的事情,它工作得很好那里。 我一直在谷歌上搜索,现在敲我的头这几乎一整天。 任何人有任何想法究竟发生了什么事?
更新:
我结束了使用“的GetItem”和蟒蛇“setitem”特殊的方法,一拉这个链接 。 链接显示了如何定义与访问功能的静态包装一个漂亮的结构模板,所以你不必惹的界面到原来的C ++类。