2014年9月27日土曜日

テンプレート引数を式パラメータにしたとき

TMPの練習にと、FizzBuzzしたり素数並べたりしてるとこで

template<int N, int D = N - 1> struct Test

っていう形に出会った。パッと見第2引数が常にN - 1になるかと思ったが、実はそうではなかった。

テンプレートの第2引数に何も指定されていなければD=N - 1になり、何か引数が与えらていればDはその値になるようだ。

例えば以下のコードの出力は
9
5
10
 になる。

#include <iostream>

template<int N, int D = N - 1> struct Test{
    Test(){
        std::cout << D << std::endl;
    }
};

template<int N> struct Test<N, 1>{
    Test(){
        std::cout << N << std::endl;
    }
};

int main()
{
    Test<10>();
    Test<10, 5>();
    Test<10, 1>();
}


ちなみに3つ目は部分特殊化

0 件のコメント:

コメントを投稿