我想导出到python模块(用c ++编写,带有boost.python库)这样的函数:
Vec2<Type> &normalize ()
Type dot(const Vec2<Type> &vector) const
这些是模板类Vec2
的成员。这是我的导出代码:
bp::class_< Vec2<int> >("Vec2i", bp::init<int, int>())
.def("Length", &Vec2<int>::length)
.def("Dot", &Vec2<int>::dot, bp::return_internal_reference<>());
//.def("Normalize", &Vec2<int>::normalize);
Length
方法编译成功,但Dot
和Normalize
返回相同的错误(在编译期间):
error: no matching function for call to ‘boost::python::class_<Vec2<int> >::def(const char [4], <unresolved overloaded function type>, boost::python::return_internal_reference<>)’
我做错了什么?
UPD
真正的班级名称为:CL_Vec<Type>
,此处为docs。
答案 0 :(得分:4)
如果您查看vec2.h
(或您链接到的文档),您会发现dot
和normalize
都已超载,因为还存在static
这些版本。
你可以通过使用一些函数指针来解决这个问题:
Vec2<int> &(Vec2<int>::*norm)() = &Vec2<int>::normalize;
然后在def
中使用它,如here所述。
答案 1 :(得分:2)
当编译器说:
<unresolved overloaded function type>
看看你的指向成员或函数指针(&amp; Vec2 :: dot),看看它是否引用了一组重载函数(它应该)。在这种情况下,您可能需要一个明确的static_cast&lt;&gt;指向成员的指针或函数指针类型,包括函数参数类型。