重载运算符()

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号会成功吗?

Eti*_*tel 5

这是预期的行为.zp是一个指针(a Z *),并且operator()过载Z,而不是Z *.当你尊重与指针*zp,你得到一个Z &,为此operator() 超载.

不幸的是,你不能为一个指针类型重载一个操作符(我认为它与指针不是用户定义类型的事实有关,但我没有标准在我面前).您可以使用引用简化语法:

Z & r = *zp;
r(3);
Run Code Online (Sandbox Code Playgroud)