2005年07月08日
Template で条件分岐
Template でプログラム中の条件分岐を全てやってしまうことはできないだろうか? 最近こんなことを考えていたのだが,if 文だけなら何とかなるなぁと思ってみた.各処理ブロックをTemplate にして,必要な変数を全て Template 引数にして,条件分岐に Selector を使って条件に応じて適した Template クラスの calc() メソッドを呼ばせると.このとき,else 節がいらない場合には, Nothing という何もしない Template を使うと.たとえば,x が y より小さいときだけ出力する場合には,こんなかたちでできるはず.
template <bool judge, typename T, typename F>
struct Selector{ typedef T val; };
template <typename T, typename F>
struct Selector<false, T, F>{ typedef F val; };
struct Nothing{ inline static void calc(){}};
template<unsigned int x, unsigned int y>
struct Printer{
inline static void calc(){
cout << x << " < " << y << endl;
}
};
template<unsigned int x, unsigned int y>
struct MinThenPrint<x, y >{
inline static void calc(){
Selector<(x < y), Printer<x,y>,Nothing>::val::calc();
}
};
- Comments: 0
- TrackBack (Close): -