Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<unsigned int N>
- class A { ... }
- for(unsigned int i = 0; i < 10; ++i) {
- A<i>().doStuff();
- }
- A<1> first;
- A<2> second;
- A<42> third;
- A<1034> fourth;
- void doAppropriateStuff(int value) {
- if (value < 1) {
- first.doStuff();
- } else if (value < 2) {
- second.doStuff();
- } else if (value < 42) {
- third.doStuff();
- } else if (value < 1034) {
- fourth.doStuff();
- } else {
- ...
- }
- }
- #include <iostream>
- template<unsigned int N>
- struct A {
- void dostuff() const { std::cout << N << " "; }
- };
- template < int N > void run();
- template <> void run<-1>() {}
- template < int N > void run() {
- run<N-1>();
- A<N>{}.dostuff();
- }
- int main() {
- run<10>();
- }
- #include <iostream>
- #include <tuple>
- template<unsigned int N>
- struct A {
- unsigned int getN() const { return N; }
- void dostuff() const { std::cout << N << " "; }
- };
- auto globals = std::make_tuple( A<3>{}, A<7>{}, A<10>{}, A<200>{} );
- template <int idx> void run( int v );
- template <> void run<std::tuple_size<decltype(globals)>::value>( int ) {}
- template <int idx = 0> void run( int v ) {
- auto & a = std::get<idx>(globals);
- if ( v < a.getN() ) {
- a.dostuff();
- } else {
- run<idx+1>(v);
- }
- }
- int main() {
- for( int i = 0; i<20; ++i)
- run( i );
- }
- template< std::size_t... Ns >
- struct indices {
- typedef indices< Ns..., sizeof...( Ns ) > next;
- };
- template< std::size_t N >
- struct make_indices {
- typedef typename make_indices< N - 1 >::type::next type;
- };
- template<>
- struct make_indices< 0 > {
- typedef indices<> type;
- };
- #include <initializer_list>
- template<size_t... Is>
- void foo(indices<Is...>)
- {
- auto list = { (A<Is>().doStuff(), 0)... };
- }
- foo(make_indices<10>::type());
- template <unsigned int N> struct ADoer
- {
- static void go() { A<N>().doStuff(); ADoer<N - 1>::go(); }
- };
- template <> struct ADoer<0>
- {
- static void go() { }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement