overloaded_function, fusedがラムダ式に対応した
ちょっと頑張ってmake_overloadやmake_fusedでラムダ式も扱えるようにしました。
https://github.com/fimbul/shiro/blob/master/shiro/functional/overloaded_function.hpp
https://github.com/fimbul/shiro/blob/master/shiro/tuple/fused.hpp
これで以下のようなコードが書けるようになりました。
かくなる上は関数ポインタ対応か。
#include <shiro/functional.hpp> #include <shiro/tuple.hpp> #include <cassert> int main() { constexpr auto f = shiro::make_fused( shiro::make_overload(std::plus<int>{}, std::minus<double>{})); static_assert(f(1, 2) == 3, ""); static_assert(f(3.0, 1.0) == 2.0, ""); static_assert(f(shiro::make_tuple(1, 2)) == 3, ""); static_assert(f(shiro::make_tuple(3.0, 1.0)) == 2.0, ""); auto g = shiro::make_fused( shiro::make_overload([](auto a, auto b) { return a + b; }, [](auto a, auto b, auto c) { return a + b + c; })); assert(g(1, 2) == 3); assert(g(1, 2, 3) == 6); assert(g(shiro::make_tuple(1, 2)) == 3); assert(g(shiro::make_tuple(1, 2, 3)) == 6); }