Функции экспорта, которые возвращают ссылку - PullRequest
2 голосов
/ 20 марта 2011

Я хочу экспортировать в модуль 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>, вот документы .

Ответы [ 2 ]

4 голосов
/ 20 марта 2011

Если вы посмотрите на vec2.h (или на документы, на которые вы ссылаетесь), вы увидите, что dot и normalize оба перегружены, так как существуют также static версииэти.

Вы можете обойти это, используя несколько указателей на функции:

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

и затем используя это в def, как объяснено здесь .

2 голосов
/ 20 марта 2011

Когда компилятор говорит:

<unresolved overloaded function type>

Посмотрите на указатель на элемент или указатель на функцию (& Vec2 :: dot) и посмотрите, относится ли он к набору функций перегрузки (так и должно быть). В этом случае вам может потребоваться явное static_cast <> для конкретного указателя на член или типа указателя на функцию, включая типы параметров функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...