ゆとりーなの日記

日記的な事を書いて行くと思はれる

DXライブラリとrandom_shuffleが微妙に噛合はない

C++11環境ではshuffle函數があつて、正直此方の方が良い感はあるのですが、DXライブラリを使つてゐる場合はC++11の亂數ではなくてDXライブラリの亂數を使つた方がグローバルでゲーム向きなところもあるのでDXライブラリの方の亂數を使ふと云ふ事もあるかと思ひます(中身もメルセンヌツイスタらしいですし)。
で、配列をシャッフルするのにはrandom_shuffleのシャッフルの基準を決められるオーバーロードを使へばDXライブラリの亂數でシャッフル出來る樣になります。基準を決めるファンクタは、0以上引數未滿の亂數を返す樣に實裝すれば良いので、適當にラムダを書いてしまへば大丈夫です。

std::random_shuffle(yama.begin(), yama.end(), [](std::size_t n) {return GetRand(n - 1);});

ここでboostの範圍を使ひたくなるのが人情だと思ふのですが、現状のboost(1.54.0)では、函數オブジェクトを取る引數が參照版しか存在しない樣なので、上みたいにラムダを作つて渡すと云ふ事が出來ません。で、GetRandが0〜引數未滿を返す實裝になつてゐてくれれば&GetRandとかで逃げられたのに何故0〜引數を返す實裝なんだあ!と愚痴りたくなつたと云ふそれだけの話でした。
それともboostのどこかに11對應した函數オブジェクトに&&を取るrandom_shuffleのオーバーロードがあつたりするんですかねえ。