导出返回引用的函数

时间:2011-03-20 14:42:35

标签: c++ python boost reference export

我想导出到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方法编译成功,但DotNormalize返回相同的错误(在编译期间):

 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

2 个答案:

答案 0 :(得分:4)

如果您查看vec2.h(或您链接到的文档),您会发现dotnormalize都已超载,因为还存在static这些版本。

你可以通过使用一些函数指针来解决这个问题:

Vec2<int> &(Vec2<int>::*norm)() = &Vec2<int>::normalize;

然后在def中使用它,如here所述。

答案 1 :(得分:2)

当编译器说:

<unresolved overloaded function type>

看看你的指向成员或函数指针(&amp; Vec2 :: dot),看看它是否引用了一组重载函数(它应该)。在这种情况下,您可能需要一个明确的static_cast&lt;&gt;指向成员的指针或函数指针类型,包括函数参数类型。