そんなこんなである要求を満たした型を想定して、それ以外の型は弾くが要求を満たす型ならどんな型でも利用可能なコンセプト的なことがしたい。でも知る限りではまだconceptキーワードは使えないし、利用している環境はvc2010だから尚のこと使えるとは思えない。そこでtraitsを使って書いてみた。例えば下の関数はDrawTurnGraph/DrawTurnGraphF関数をラップしているつもり。一応コンパイルも通るしきちんと描画されているみたいだが、正直追いきれる自身はない。
template
inline int DrawTurnGraph( const Point& p, const GH& g, const TransFlag& trans ){
typedef zxc::img::ImageDrawingTraits traits;
return (
zxc::img::DrawTurnGraph(
traits::x(p), traits::y(p),
traits::gh(g), traits::trans_flag(trans))
);
}
今更だけれど、これはごく一部の関数にしか共有されない引数でやると旨みが少ないと思うが、ここまできたら全ての引数をtraitsで用意してしまうべきという気もしてきて迷う。