やってみたらここらへんで力尽きた。

struct BoundRight
{
	const ball_pos_t r;
	BoundRight( ball_pos_t r )
		:r ( r ){}

	template<typename Obj>
	bool operator () ( Obj &obj ) {
		return obj.x > r;
	}

};
struct BoundLeft
{
	const ball_pos_t l;
	BoundLeft( ball_pos_t l )
		:l ( l ){}

	template<typename Obj>
	bool operator () ( Obj &obj ) {
		return obj.x < l;
	}
};

lessとかgreaterとかを引数にすれば、いけるだろうけど…飽きてくる。


関数型言語でこういうのをやってると、そのうち「これ以上やりすぎたらコンパイラが最適化してくれなくなるからやめとこう」って言い訳ができるんだけど、templateはそういう言い訳が使えないので、そう、だから、つまり、途中で諦めたというのは、すなわち敗北なのである!!