まじめに作ったらそのままBoostになっちゃいました。。。
template<class Engine, class IntType = long> class random_number_generator { public: typedef Engine base_type; typedef IntType argument_type; typedef IntType result_type; random_number_generator(base_type& engine) : engine_(engine) {} result_type operator()(argument_type value) { typedef std::tr1::uniform_int<IntType> dist_type; return std::tr1::variate_generator<base_type&, dist_type>(engine_, dist_type(0, value-1))(); } private: base_type& engine_; };