C/C++

C++. Указатели на функции

Как их выводить?
Подсткажите плс
#include functional
#include iostream
bool all(int a,int b) {
if(a > b)
return true;

return false;
}
int main() {
int a = 8;
int b = 7;
std::function affa;
std::cout << affa(a,b); // я пробовал (int,int), но не компилится.
return 0;
}
WA
Wine And We
364
#include <iostream>
#include <iomanip>
using namespace std;
using func = double (*)(double, double);
double sum(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }
double mul(double a, double b) { return a * b; }
double div(double a, double b) { return a / b; }
double calc(double a, double b, func fn) { return fn(a, b); }
int main() {
const auto w = 3U;
auto a = 8.0;
auto b = 5.0;
cout
<< a << " + " << b << " = " << setw(w) << calc(a, b, sum) << '\n'
<< a << " - " << b << " = " << setw(w) << calc(a, b, sub) << '\n'
<< a << " * " << b << " = " << setw(w) << calc(a, b, mul) << '\n'
<< a << " / " << b << " = " << setw(w) << calc(a, b, div) << '\n';
system("pause > nul");
}
Кондратьев Максим
Кондратьев Максим
55 058
Лучший ответ
L@zik™ Safarov Ну зачем указатели? Передать ссылкой фунцию если надо даже в ТАКОМ случае как в этом коде.
Нафиг указатели если Вы используете functional (и правильно делаете).
С указателями Вы сразу себе создадите массу проблем. Как раз functional и сделана для того, чтобы уйти от указателей, при этом сделать код лакончиным и безопасным.

#include < iostream >
#include < functional >

bool all(int a,int b) {
if(a > b)
return true;
return false;
//return a>b ; <-- была-бы запись лаконичнее.
}

int main() {
int a = 8;
int b = 7;
std::function affa = all; //Просто надо было присвоить и никаких указателей
//Ну или через конструктор std::function affa(all);
std::cout << affa(a,b);
return 0;
}

https://onlinegdb.com/GALzBgKLB

Вообще для таких "однострочных" функций в очень многих случаях лучше использовать лямбда-функции.
https://onlinegdb.com/aKrN9_eEm

ЗЫЖ В современном C++ принято избегать указателей где только можно. Вместо них в частности используются ссылки н-р. И использование указателей в обычных ситуациях - означает что Вы что-то делаете не так.
Объяви сперва указатель на функцию:
bool (*affa)(int a, int b);

Потом запускай
либо так: affa(a,b);
либо так: (*affa)(a,b);
Тынчтык Дороонбеков Да хоть так))
(********************affa)(a, b);