C ++用于从指向对象的指针访问operator()的语法

时间:2015-09-30 11:56:57

标签: c++ pointers

我有一个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);

2 个答案:

答案 0 :(得分:0)

使用

(*dis_p)(*gen_p);

(你是)或

dis_p->operator()(*gen_p);

然而,就个人而言,我根本不会使用指针。代替

dis(gen);

会做到这一点(因为dis_p指向disgen_pgen)。

可以在类中存储引用(尽管它们需要使用构造函数初始化,并且不能像指针那样重新设置)。

答案 1 :(得分:0)

您还可以先将指针转换为引用:

auto& rDis = *dis_p;
auto& rGen = *gen_p;
rDis(rGen);

编译器无论如何都会优化整个交易成为(*dis_p)(*gen_p),因此没有运行时开销。

此外,普通(*dis_p)(*gen_p)没有任何问题,我认为这并不令人困惑。