Как передать функцию в качестве параметра другой функции на C++ в Visual Studio 2019?
Я в Интернете нашёл только однообразные куски непонятного кода, который тем более и не работает. Если можно - привести пример.
Другие языки программирования и технологии
Как передать функцию в качестве параметра другой функции на C++?
#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");
}
#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");
}
Передать функцию нельзя - это не js. Достичь похожего эффекта можно разными способами:
1. С помощью указателя на функцию
2. С помощью класса с перегруженным оператором ()
3. С помощью именованного (и не очень) лямбда-выражения
Для удобства применения можно посмотреть на std::function
1. С помощью указателя на функцию
2. С помощью класса с перегруженным оператором ()
3. С помощью именованного (и не очень) лямбда-выражения
Для удобства применения можно посмотреть на std::function
"Предельно понятный и лёгкий код" - это не C++.
"Куски непонятного кода" - это похоже на C++.
Тебе нужен указатель на функцию. Готовый код написать не могу, поскольку он зависит от описания функции.
"Куски непонятного кода" - это похоже на C++.
Тебе нужен указатель на функцию. Готовый код написать не могу, поскольку он зависит от описания функции.
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 )
{
...
}
{
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 )
{
...
}
Похожие вопросы
- Вопрос насчет объявления и параметра функции в C++
- Виртуальные функции в c#,зачем они?
- Объясните, что происходит в () функций в c++
- Описать функцию в c++, которая находит среднее арифметическое значение всех элементов сформированного непустого списка
- функция в C++
- C++ Везде написано, что sizeof() с массивом в качестве аргумента возвращает полный размер. А в данной функции не так.
- Вопрос для тех кто знает точный ответ, язык C про функции все подробности вопроса внутри...
- Функции в языке программирования C.
- Оконное приложение на WinAPI, вопрос про параметры функции WndProc. Язык программирования Си.
- Задача по C++ Не могу придумать как одновременно записывать в массив и считать функцию.