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"; }