У меня есть простое требование, которое включает передачу указателей функций на другую функцию и выполнение их там. Функция приведена ниже.
void drawPolarCurves(Canvas &cnv, Point2 center, float (* fx)( float ), float (* fy)( float ));
Я пытаюсь передать анонимные функции в качестве параметра, как показано ниже.
void drawMyShape(Canvas &cnv, Point2 center, float width, float height)
{
drawPolarCurves(cnv, center,
[&width](float x)-> float { return x * width; },
[&height](float x)-> float { return x * height; }
);
}
Это приводит к следующей ошибке:
Недопустимые аргументы. Кандидаты: void drawPolarCurves (Canvas &, Point2, float() (float), float() (float)) '
Я проверил снова и снова, и все кажется правильным, включая аргументы компилятора Eclipse на Ubuntu.
благодаря
Лямбда-выражение с захватом не может быть неявно преобразовано в указатель функции без захвата.
Способы устранения проблемы:
drawPolarCurves
чтобы принять std::function<float(float)>
или аргумент шаблонаfunctional
заголовка?