テンプレートメタプログラミング(ループ)

ループの基本形です。テンプレート引数をデクリメントして再帰的に呼び出すことで実現することができます。

template <int N>struct UNROLL {
	static void iteration(int i) {
		cout<< i <<endl;
		UNROLL<N-1>::iteration(i+1);
	}
};
template <>
struct UNROLL<0>{
	static void iteration(int i) {
	}
};
UNROLL<3>::iteration(2);

テンプレート引数にクラスを指定すればループ内で関数を呼び出すことができます。

class A{
public:
	static void function(int i){
		cout<< i <<endl;
	}
};

template <int N, class A>struct UNROLL {
	static void iteration(int i) {
		A::function(i);
		UNROLL<N-1, A>::iteration(i+ 1);
	}
};
template <class A>struct UNROLL<0, A>{
	static void iteration(int i) {
	}
};
UNROLL<3, A>::iteration(2);


2
3
4