Есть такой код:
#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;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Например есть файл qmakeconf для MCU iMX6 там значение -march=armv7-a, а для MCU iMX287 рекомендуют -march=armv5te на что конфигуратор ругается
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Есть форма, на которой расположены несколько кнопок с именами "up", "down", и тд