我有一个C ++ 11随机数分布的实例; uniform_int_distribution
,以及C ++ m19937_64
算法的实例。
我使用指向类的指针传递对这些的引用,该类维护指向这2个对象的指针供以后使用。
在此课程的成员函数中,我希望调用operator()
函数从uniform_int_distribution
生成随机数。
我做了以下事情。 (可能不正确,因此问题。)
std::random_device rd;
std::mt19937_64 gen(rd());
std::mt19937_64 *gen_p = &gen;
std::uniform_int_distribution<int> dis(0, 9);
std::uniform_int_distribution<int> *dis_p = &dis;
然后我执行以下操作:(稍后在代码中,在我的类成员函数中。)
int random_number = (*dis_p)(*gen_p);
这看起来有点奇怪或含糊不清,或者至少它对我有用,因为我之前没有遇到过这种情况。
如果没有指针,可以执行以下操作:
int random_number = dis(gen_p);
答案 0 :(得分:0)
使用
(*dis_p)(*gen_p);
(你是)或
dis_p->operator()(*gen_p);
然而,就个人而言,我根本不会使用指针。代替
dis(gen);
会做到这一点(因为dis_p
指向dis
和gen_p
点gen
)。
可以在类中存储引用(尽管它们需要使用构造函数初始化,并且不能像指针那样重新设置)。
答案 1 :(得分:0)
您还可以先将指针转换为引用:
auto& rDis = *dis_p;
auto& rGen = *gen_p;
rDis(rGen);
编译器无论如何都会优化整个交易成为(*dis_p)(*gen_p)
,因此没有运行时开销。
此外,普通(*dis_p)(*gen_p)
没有任何问题,我认为这并不令人困惑。