从指向对象的指针访问operator()的语法
C++ Syntax for accessing operator () from a pointer to an object
我有一个c++ 11随机数分布的实例;uniform_int_distribution
,以及一个c++ m19937_64
算法的实例。
我将这两个using指针的引用传递给一个类,这个类维护一个指向这两个对象的指针,以供以后使用。
在这个类的一个成员函数中,我希望调用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);
使用
(*dis_p)(*gen_p);
(as you are)或
dis_p->operator()(*gen_p);
然而,就我个人而言,我根本不会使用指针。而不是dis(gen);
可以达到这个目的(因为dis_p
点在dis
, gen_p
点在gen
)。
可以在类中存储引用(尽管它们需要使用构造函数初始化,并且不能像指针那样重新定位)。
您也可以先将指针转换为引用:
auto& rDis = *dis_p;
auto& rGen = *gen_p;
rDis(rGen);
编译器会将整个协议优化为(*dis_p)(*gen_p)
,所以没有运行时开销。
同样,普通的(*dis_p)(*gen_p)
也没有什么问题,我不认为这是令人困惑的。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 'operator='已弃用:改用 QDir::setPath()
- 过载'operator new'如何导致无限循环?
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 与'operator='不匹配(操作数类型'String'且"void")
- 使用基类指针调用基类的值构造函数的语法是什么?
- 放置/分段语法是否可能出现懒惰"operator or"重载?
- "operator()..."语法在C++中是什么意思?
- 从指向对象的指针访问operator()的语法