boost::random見てみた
boost::random見てみた。
お、おお・・・うつくしい。なるほど、なるほど。
乱数生成器と生成される数値の型・範囲、分布モデル、を自由に決められる。
boost::variate_generator< 生成器, 分布モデル > hoge( 生成器のインスタンス, モデルのインスタンス )
個人的にはとても綺麗だなぁー、と感じました。
というのも、以前、確率分布モデルに任意の乱数生成器を組み合わせるテンプレートを書いたのだ。
template< class RandGen > class Gaussian{ void somefunc(){ ... RandGen::genreal(); ... } ... }; class RandBase{ public: virtual void init() = 0; virtual int genint() = 0; virtual double genreal() = 0; }; class MTRand{ static void init(){ ... } static int genint(){ ... } static double genreal(){ ... } };
という感じ。
まあ結局似たようなことをやっているんですが。
書いていた当時は、個別の数で初期化した複数の乱数生成器を使い分けるという方法が思いつかず、結局それは諦め手しまいました。
なるほど、乱数生成器のインスタンスを渡せばいいのかー。
当たり前っちゃあ当たり前だよなー。という感じ。
というわけで最近boostにうっとりしています。
すごいgenericな構造しているなぁ、Boostすごいなぁ、C++すごいなあ、と思う反面、
コードがどんどんわけ分からなく、かつ長くなっていくことに懸念を感じます。
ちょっと使うために書かなければいけないコードの量がハンパ無い。
そもそもC++の++って、なんで存在したんだっけとか思ってしまう。
また、boostを使うにあたってよく言われる障壁は、C++のgenericなプログラミングに慣れている必要があるということらしいですね。
先鋭化していくことで、できることは増えるんだけど、そこにたどり着くのに障害が多くて使ってもらえなきゃちょっとなあ、というのも同時に感じます。
そのうち、boostのラッパーとか誰か作ったりしちゃうんだろうか。
まあそもそもboostの目的がそういうユーザーをターゲットにしてなさそうなので別にいいのかもしれませんが。
個人的にはこんなに便利でウマいメシ食わなきゃ損だと思います。
なんだか宣伝っぽくなってしまった。