Ult*_*ior 1 c++ pointers operator-overloading function-object
我有这个声明
struct Z {
void operator ()( int a ) {
cout << "operator()() " << a << endl;
}
};
Z oz, *zp = &oz;
oz(1); //ok
(*zp)(2); //ok
zp(3); //"error: 'zp' cannot be used as a function"
Run Code Online (Sandbox Code Playgroud)
有没有办法修改结构声明,所以调用3号会成功吗?
这是预期的行为.zp是一个指针(a Z *),并且operator()过载Z,而不是Z *.当你尊重与指针*zp,你得到一个Z &,为此operator() 被超载.
不幸的是,你不能为一个指针类型重载一个操作符(我认为它与指针不是用户定义类型的事实有关,但我没有标准在我面前).您可以使用引用简化语法:
Z & r = *zp;
r(3);
Run Code Online (Sandbox Code Playgroud)