Другие языки программирования и технологии

Как передать функцию в качестве параметра другой функции на C++?

Как передать функцию в качестве параметра другой функции на C++ в Visual Studio 2019?
Я в Интернете нашёл только однообразные куски непонятного кода, который тем более и не работает. Если можно - привести пример.
#include <iostream>
#include <functional>
using namespace std;
double sum(double a, double b) {
return a + b;
}
double diff(double a, double b) {
return a - b;
}
double mult(double a, double b) {
return a * b;
}
double calc(double a, double b, function<double(double, double)> func) { // Теперь вот так!
return func(a, b);
}
int main() {
double a, b;
cout << "a: "; cin >> a;
cout << "b: "; cin >> b;
auto sm = calc(a, b, sum);
auto df = calc(a, b, diff);
auto mt = calc(a, b, mult);
cout
<< a << " + " << b << " = " << sm << '\n'
<< a << " - " << b << " = " << df << '\n'
<< a << " * " << b << " = " << mt << '\n';
system("pause");
}
Мухаммадрасул Маматкулов
Мухаммадрасул Маматкулов
92 756
Лучший ответ
Передать функцию нельзя - это не js. Достичь похожего эффекта можно разными способами:
1. С помощью указателя на функцию
2. С помощью класса с перегруженным оператором ()
3. С помощью именованного (и не очень) лямбда-выражения
Для удобства применения можно посмотреть на std::function
SR
Sardor Raximov
39 077
"Предельно понятный и лёгкий код" - это не C++.
"Куски непонятного кода" - это похоже на C++.
Тебе нужен указатель на функцию. Готовый код написать не могу, поскольку он зависит от описания функции.
ЮШ
Юрий Шилов
36 282
void f( int(*funk)(int a, int b) )
{
if( funk )
{
funk( 1, 2 );
}
}

int my_funk(int a,int b)
{
return a+b;
}

...
f(my_funk);

////
более удобный и правильный вариант

using MyFunction = int(__cdecl и т. д. по желанию сюда * )(int a, int b);
void f( MyFunction func )
{
...
}
Dima Gamanji
Dima Gamanji
203