Как передать в аргумент функцию, и выполнить её, передаваю в неё параметры?

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

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

#include <iostream>

// Объявление функции, которую будем передавать
int add(int a, int b) {
    return a + b;
}

// Функция, принимающая указатель на функцию
void performOperation(int a, int b, int (*operation)(int, int)) {
    int result = operation(a, b);
    std::cout << "Результат операции: " << result << std::endl;
}

int main() {
    int a = 5;
    int b = 3;

    // Вызов функции performOperation и передача указателя на функцию add
    performOperation(a, b, add);

    return 0;
}

2. Функциональный объект (функтор):

#include <iostream>

// Функтор
struct Add {
    int operator()(int a, int b) {
        return a + b;
    }
};

// Функция, принимающая функциональный объект
void performOperation(int a, int b, Add operation) {
    int result = operation(a, b);
    std::cout << "Результат операции: " << result << std::endl;
}

int main() {
    int a = 5;
    int b = 3;

    // Вызов функции performOperation и передача функционального объекта Add
    performOperation(a, b, Add());

    return 0;
}

В обоих примерах функция performOperation принимает два числовых аргумента a и b, а также указатель на функцию operation, которая принимает два числа и возвращает результат их операции. В примере с указателем на функцию мы передаем функцию add, а в примере с функциональным объектом - объект класса Add. Оба примера выводят на экран результат операции сложения чисел a и b.