У меня есть код, который объединяет 3 лямбда-функции:
#include <functional>
#include <iostream>
using namespace std;
template <typename F, typename G, typename H>
auto concat(F f, G g, H h) {
return [=](auto... parameters) {
return f( g( h( parameters... ) ) );
};
}
int main() {
auto func1 (
[](int i) {
return (i * 2);
}
);
auto func2 (
[](int i) {
return (i % 2);
}
);
auto combined (
concat(func1, func2, greater<int>{})
);
cout << combined(3, 2) << endl;
return 0;
}
Мой вопрос: что является фактическим типом (F, G, H) в шаблоне? Это указатель на функцию, или функциональный объект, или что-то еще? Как я могу проиллюстрировать его тип в коде?