Каким образом передать функции с параметрами в указатели на функции другой функции?
Хочу узнать, каким образом можно передать функции foo3, функции foo1 и foo2, которые во время вызова функции foo3, выполняли свои роли, а именно преобразовывали x из 1 в 10, а y из 2 в 20. Функция foo3 в свою очередь умножила x(10) и y(20) друг на друга. Функция foo3 НЕ РАБОЧАЯ.
#include <iostream>
using namespace std;
int foo1(int& x) {
return x = 10;
}
int foo2(int& y) {
return y = 20;
}
int foo3(int (*name_func1)(int& x), int (*name_func2)(int& y)) {
return name_func1(x) * name_func2(y);
} // Функция лишь пример, и требует в доработке
int main() {
int x = 1, y = 2;
int (*ptr_foo1)(int& x);
int (*ptr_foo2)(int& y);
cout << "Before calling functions via function pointers:\n";
cout << "x + y = " << x + y << endl;
cout << endl;
ptr_foo1 = foo1;
ptr_foo2 = foo2;
ptr_foo1(x);
ptr_foo2(y);
cout << "After calling functions via function pointers:\n";
cout << "x + y = " << x + y << endl;
cout << endl;
cout << "Simple multiplication:\n";
cout << "x * y = " << x * y << endl;
cout << "Multiplication with function pointer in function:\n";
cout << "x * y = " << foo3(foo1(x), foo2(y)); // Ошибка...
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Вот так:
#include <iostream>
using namespace std;
int foo1(int& x) {
return x = 10;
}
int foo2(int& y) {
return y = 20;
}
int foo3(int (*name_func1)(int&), int (*name_func2)(int&), int& x, int& y) {
return name_func1(x) * name_func2(y);
} // Функция лишь пример, и требует в доработке
int main() {
int x = 1, y = 2;
int (*ptr_foo1)(int&);
int (*ptr_foo2)(int&);
cout << "Before calling functions via function pointers:\n";
cout << "x + y = " << x + y << endl;
cout << endl;
ptr_foo1 = foo1;
ptr_foo2 = foo2;
ptr_foo1(x);
ptr_foo2(y);
cout << "After calling functions via function pointers:\n";
cout << "x + y = " << x + y << endl;
cout << endl;
cout << "Simple multiplication:\n";
cout << "x * y = " << x * y << endl;
cout << "Multiplication with function pointer in function:\n";
cout << "x * y = " << foo3(foo1, foo2, x, y); // Ошибка...
return 0;
}