Skip to content

Instantly share code, notes, and snippets.

@tamaskenez
Created December 15, 2022 19:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tamaskenez/df15d148fd8b507167d9cfa644636561 to your computer and use it in GitHub Desktop.
Save tamaskenez/df15d148fd8b507167d9cfa644636561 to your computer and use it in GitHub Desktop.
Define switch_variant, helper for switch on variants.
/* Use switch_variant like this:
switch_variant(someVariant,
[](AlternativeWithoutData) { ... },
[](const AlternativeWithData& x) { ... },
...
[](auto) {} // default branch
};
*/
template <typename... Ts>
struct overloaded : Ts... {
using Ts::operator()...;
};
template <typename... Ts>
overloaded(Ts...) -> overloaded<Ts...>;
template <typename... Ts, typename Variant>
auto switch_variant(Variant&& variant, Ts&&... ts) {
return std::visit(overloaded{std::forward<Ts>(ts)...}, std::forward<Variant>(variant));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment