Это скорее дополнительная заметка, но я сделал что-то очень похожее для развлечения во время курортного сезона Здесь слишком много кода, чтобы его вместить, но вы можете проверить код здесь или живую версию здесь .
в основном это функция, которая возвращает лямбду, фиксирующую все функции для вызова. Это позволяет вам написать следующий код:
#include <iostream>
#include <string>
#include "chain.hpp"
int f(int x) { return x; }
std::string g(int x) { return std::to_string(x); }
double h(std::string x) { return x.size(); }
int main() {
auto function = fn::chain(f, g, h);
std::cout << function(5) << '\n'; // prints 1
return 0;
}
Он также попытается расширить восстановленные кортежи с помощью std :: apply, если std :: invoke не работает. Это делает следующий код действительным:
#include <iostream>
#include <tuple>
#include "chain.hpp"
int main() {
auto test = fn::chain([](int i, int j) { return i + j; },
[](int i) { return i * 2; },
[](int i) -> std::tuple<int, int> {
return {i, i};
},
[](int i, int j) { return i + j; });
std::cout << test(1, 2) << '\n'; // prints 12
}
Как я уже сказал, это был просто забавный опыт, но, может быть, это будет полезно!