在我的编程中,我需要创建用户定义数量的ublas 矢量。我想用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);
}
我必须class
专门为函数调用创建一个,因为std::generate
不允许我使用带有参数的函数作为第三个参数(“gen”,请参见此处。我需要正态分布的数字,因此函数调用分布函数必须包含作为参数的随机数生成器。因为它不允许我用参数调用它,所以我必须编写一个类来为我做这件事。
我写的课:
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::*)()’
我不知道编译器要我在这里做什么,也不知道为什么它在这方面有这么多麻烦。非常感谢任何建议。