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

Пользователь

от jose , в категории: C/C++ , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от elian.swift , год назад

@jose 

В C++, можно передавать функции как параметры в другие функции. Для этого нужно использовать указатель на функцию или стандартный функциональный объект.


Вот примеры обоих способов:

1. Указатель на функцию

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>

// Пример функции, которая принимает указатель на функцию в качестве параметра
void applyFunction(int a, int b, int (*funcPtr)(int, int)) {
    int result = (*funcPtr)(a, b);
    std::cout << "Result: " << result << std::endl;
}

// Пример функции, которую мы будем передавать в качестве параметра
int sum(int a, int b) {
    return a + b;
}

int main() {
    // Вызываем функцию applyFunction и передаем в нее указатель на функцию sum
    applyFunction(3, 4, &sum);

    return 0;
}


2. Функциональный объект

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <functional>

// Пример функции, которая принимает объект std::function в качестве параметра
void applyFunction(int a, int b, std::function<int(int, int)> funcObj) {
    int result = funcObj(a, b);
    std::cout << "Result: " << result << std::endl;
}

// Пример лямбда-функции, которую мы будем передавать в качестве параметра
auto product = [](int a, int b) {
    return a * b;
};

int main() {
    // Вызываем функцию applyFunction и передаем в нее лямбда-функцию product
    applyFunction(3, 4, product);

    return 0;
}


Обратите внимание, что в обоих случаях функция applyFunction принимает два целочисленных параметра a и b, а также указатель на функцию или объект std::function, принимающий два целочисленных параметра и возвращающий целое число.


Кроме того, в обоих примерах мы передаем в функцию applyFunction функции sum и product в качестве параметров. В первом примере мы передаем указатель на функцию sum с помощью оператора &, а во втором - объект std::function, созданный из лямбда-функции product.