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 件のコメント:
コメントを投稿