3 ms·
If I want dark blood magic for my visitor pattern then I choose C++ over haskell. template <class ...Fs> struct overload : Fs... { te
by injidup 6y ago
If I want dark blood magic for my visitor pattern then I choose C++ over haskell.
template <class ...Fs>
struct overload : Fs... {
template <class ...Ts>
overload(Ts&& ...ts) : Fs{std::forward<Ts>(ts)}...
{}
using Fs::operator()...;
};
template <class ...Ts>
overload(Ts&&...) -> overload<std::remove_reference_t<Ts>...>;
int main()
{
auto fn = overload(
[](int x){ std::cerr << "got int " << x << std::endl;}
,[](std::string x) {std::cerr << "got string " << x << std::endl;}
,[](double x){ std::cerr << "got double " << x << std::endl;}
);
fn(10);
fn("10");
fn(10.);
}
outputs
got int 10
got string 10
got double 10
See it and believe!
http://coliru.stacked-crooked.com/a/71d8de3c82b84382 http://coliru.stacked-crooked.com/a/71d8de3c82b84382
- deleted 6y ago[deleted]