Skip to content

Instantly share code, notes, and snippets.

@faithandbrave
Created September 9, 2021 06:24
Show Gist options
  • Save faithandbrave/ccfb86efe2bae219e15a15892741356e to your computer and use it in GitHub Desktop.
Save faithandbrave/ccfb86efe2bae219e15a15892741356e to your computer and use it in GitHub Desktop.
#include <iostream>
#include <string>
template <class T, class F>
auto dispatch(const T&, F&& f) { return f(); }
template <class T, class A, class F, class... Args>
auto dispatch(const T& target, A&& a, F&& f, Args&&... args) {
if (target == a) return f();
return dispatch(target, std::forward<Args>(args)...);
}
void f(std::string_view target) {
int r = dispatch(target,
"aaa", [] { return 0; },
"bbb", [] { return 1; },
"ccc", [] { return 2; },
[]{ return 3; }
);
std::cout << r << std::endl;
}
int main() {
f("aaa");
f("ccc");
f("ddd");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment