C ++ анонимная функция с возвращаемым значением

0

У меня есть простое требование, которое включает передачу указателей функций на другую функцию и выполнение их там. Функция приведена ниже.

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.

благодаря

  • 1
    Ваш код вызова не содержит анонимных функций. Содержит лямбда-выражения.
  • 0
    @ Kerrek-SB: Спасибо за указание на это. Я никогда раньше не использовал лямбда-выражения ...
Теги:
return-value
anonymous-function

1 ответ

3

Лямбда-выражение с захватом не может быть неявно преобразовано в указатель функции без захвата.

Способы устранения проблемы:

  • не записывайте значение в свои лямбды
  • изменить подпись drawPolarCurves чтобы принять std::function<float(float)> или аргумент шаблона
  • 0
    Я изменил сигнатуру функции следующим образом: void drawPolarCurves (Canvas & cnv, Point2 center, std :: function <float (float)> fx, std :: function <float (float)> fy) Ошибки по-прежнему: символ «функция» не может Неверные аргументы 'Кандидаты: void drawPolarCurves (Canvas &, Point2,?,?)'
  • 0
    @ inam101 Вы включили functional заголовка?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню