テンプレートでプログラムするための部品として if に相当する Select なるものがある.これを使うと then 節と else 節の一方のみの評価ができるので安全.ためしに Collatz 予想のやつで遊んでみた.
template<bool, typename T, typename F> struct Select{ typedef T val; }; template<typename T, typename F> struct Select<false, T, F>{ typedef F val; }; template <int n> struct Collatz { const static int val = Select<(n&1)==0, Collatz<n/2>, Collatz<3*n+1> >::val::val + 1; }; template <> struct Collatz<1> { const static int val = 0; }; int main(int argc, char *argv[]) { cout << Collatz<3>::val << endl; return 0; }
- Newer: ことはじめ