Funktionen können Funktionen als Rückgabe Type/Wert haben, solange sie die selbe Signatur vorweisen. Also z.B. alles Binary Funktionen mit Argumenten von Type double.
#include <iostream>
#include <vector>
#include <functional>
double add(const double lhs, const double rhs) {
return lhs+rhs;
}
double mul(const double lhs, const double rhs) {
return lhs*rhs;
}
// does not work
double PI() {
return 3.14;
}
enum class Operator { add, mul, PI };
auto parse(Operator op) {
switch(op) {
case Operator::add: {
return add;
}
case Operator::mul: {
return mul;
}
case Operator::PI: {
// error: inconsistent deduction for auto return type: ‘double (*)(double, double)’ and then ‘double (*)()’
// return PI;
}
}
}
int main() {
auto l = parse(Operator::add);
auto result = l(1,2);
std::cout << result << "\n";
}