Boost Random ライブラリを使用して、モンテカルロ シミュレーション用の乱数を生成しています。結果を確認するために、実行ごとに異なる RNG エンジンを使用できるようにしたいと考えています。理想的には、typedef を介してコンパイル時に RNG を選択するなどの代わりに、実行時に使用する RNG を決定するコマンドライン オプションを使用したいと考えています。
次のようなことが可能な基本クラス T はありますか?または、そうでない場合、そうでない明白な理由は?
#include <boost/random.hpp>
int main()
{
unsigned char rng_choice = 0;
T* rng_ptr; // base_class pointer can point to any RNG from boost::random
switch(rng_choice)
{
case 0:
rng_ptr = new boost::random::mt19937;
break;
case 1:
rng_ptr = new boost::random::lagged_fibonacci607;
break;
}
boost::random::uniform_int_distribution<> dice_roll(1,6);
// Generate a variate from dice_roll using the engine defined by rng_ptr:
dice_roll(*rng_ptr);
delete rng_ptr;
return 0;
}