再帰テンプレートでべき乗を計算

タイトル通り、templateを再帰的に使用することで関数チックな動作をさせる。0の場合を特殊化することで計算をうまく終了させている。また2つのtemplate引数がある場合の特殊化の書き方も覚えておきたい。

#include<iostream>
using namespace std;

//べき乗を計算
template <int N, int M>
struct power{
    static const int value = N * power<N, M - 1>::value;
};
//0の場合だけ特殊化
template<int N>
struct power<N, 0>{
    static const int value = 1;
};
//メイン関数
int main()
{
    //2^3を”コンパイル時に”計算
    cout << power<2, 3>::value << endl;
    return 0;
}

実行結果は

8