Skip to content

Instantly share code, notes, and snippets.

@chengscott
Last active January 7, 2025 16:42
Show Gist options
  • Save chengscott/d1587e8f2f2a687c424c5c8ed3973010 to your computer and use it in GitHub Desktop.
Save chengscott/d1587e8f2f2a687c424c5c8ed3973010 to your computer and use it in GitHub Desktop.
Select template by range
#include <iostream>
struct default_tag {};
struct case1_tag {};
struct case2_tag {};
template <size_t N> using selected_t = typename std::conditional<
10 <= N && N <= 20,
case1_tag,
typename std::conditional<
20 <= N && N <= 30,
case2_tag,
default_tag>::type
>::type;
template<size_t N, typename = selected_t<N>> struct X {
static const int v = 0;
};
template<size_t N> struct X<N, case1_tag> {
static const int v = 1;
};
template<size_t N> struct X<N, case2_tag> {
static const int v = 2;
};
int main() {
std::cout << X<2>::v << '\n';
std::cout << X<12>::v << '\n';
std::cout << X<22>::v << '\n';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment