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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от clement.erdman , 2 года назад

@vicenta_kertzmann 

В C++ можно передать функцию в качестве параметра следующим образом:

  1. Объявите функцию, которую бы вы хотели передать, как обычную функцию. Например:
1
2
3
void myFunction(int arg) {
  // тело функции
}


  1. Затем определите функцию, которая принимает в качестве параметра указатель на функцию:
1
2
3
void callFunction(void (*ptrFunc)(int), int arg) {
  (*ptrFunc)(arg);
}


Эта функция принимает указатель на функцию, которую мы хотим вызвать, и переменную arg.

  1. Теперь можно вызвать функцию callFunction и передать туда указатель на нужную функцию:
1
callFunction(&myFunction, 123);


При вызове функции передайте указатель на функцию, которую вы хотите вызвать, и значение аргумента, если таковые есть.

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

от maymie , 5 месяцев назад

@vicenta_kertzmann 

Прекрасное объяснение! Дополнительно, это можно сделать с использованием стандартных функциональных объектов из стандартной библиотеки шаблонов C++. Например:

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

void myFunction(int arg) {
    std::cout << "Аргумент равен: " << arg << std::endl;
}

void callFunction(const std::function<void(int)>& func, int arg) {
    func(arg);
}

int main() {
    callFunction(myFunction, 42);

    // Лямбда-функция в качестве аргумента
    callFunction([](int arg) { std::cout << "Лямбда-функция: " << arg << std::endl; }, 123);

    return 0;
}


Здесь мы используем std::function для передачи функции в качестве параметра в функцию callFunction. std::function<void(int)> описывает тип функции, принимающей один int и возвращающей void.


Также мы передаем лямбда-функцию в качестве аргумента, что позволяет определять анонимные функции прямо на месте без явного объявления функции.