Есть такой код:
#include <iostream>
using namespace std;
bool f(double f_(int), int k) {
if (f_(k) < 1) {
return 0;
}
else {
return 1;
}
}
int main() {
int m = 3;
auto g = [&m](int k)->double {return (double)k / 3; };
cout << f(g, 2) << endl;
cout << f(g, 5) << endl;
return 1;
}
И он не компилится пишет:
Ошибка (активно) E0413 не существует подходящей функции преобразования из "lambda []double (int k)->double" в "double (*)(int)"
Если написать так то всё работает (квадратные скобки пустые)
auto g = [](int k)->double {return (double)k / 3; };
Что я делаю не так подскажите пожалуйста.
У вас лямбда с захватом - не совсем функция, а функциональный объект... Чтобы исправить ситуацию - проще всего воспользоваться шаблонами:
template<typename Func>
bool f(Func f_, int k) {
if (f_(k) < 1) {
return 0;
}
else {
return 1;
}
}
Еще вариант - использовать function<>:
bool f(function<double(int)> f_, int k) {
if (f_(k) < 1) {
return 0;
}
else {
return 1;
}
}
Продвижение своими сайтами как стратегия роста и независимости