私のプログラミングでは、ユーザー定義の数のublas vectorを作成する必要があります。でこれをやりたいstd::generate
です。ただし、コンパイルエラーが発生して、それが不可能になります。
私が使用しているコード:
for (size_t a_= 0; a_ < p_; a_++)
{
ublas::vector<double> next_vhat(size_of_vec);
std::generate(next_vhat.begin(), next_vhat.end(), mygen.give_rnd);
v_hat_.push_back(next_vhat);
}
3 番目の引数 (「gen」、こちらを参照) として引数を持つ関数を使用できないclass
ため、関数呼び出し専用に作成する必要がありました。数値を正規分布にする必要があるため、関数呼び出しを分布関数には、引数として乱数ジェネレーターが含まれている必要がありますが、引数を指定して呼び出すことはできなかったので、これを行うクラスを作成する必要がありました。std::generate
私が書いたクラス:
class RandGen
{
public:
RandGen()
: generator()
, norm_dist(0.0,1.0)
, random_seed(static_cast<unsigned>(std::time(NULL)))
{}
double give_rnd() { return (double) norm_dist(generator); }
private:
base_gen_t generator;
boost::random::normal_distribution<double> norm_dist; //Standard normal distribution
unsigned random_seed;
};
私が得ているエラー
全体をコンパイルしようとすると、次のエラーが発生します。
error: cannot convert ‘RandGen::give_rnd’ from type ‘double (RandGen::)()’ to type ‘double (RandGen::*)()’
コンパイラがここで私に何をさせようとしているのか、あるいはなぜコンパイラがこれほど多くの問題を抱えているのか、私にはまったくわかりません。どんなアドバイスでも大歓迎です。