我有这个声明

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"

有没有一种方法可以修改struct声明,所以对3号的调用会成功吗?

最佳答案

这是预期的行为。 zp是一个指针(一个Z *),并且operator()重载了Z,而不是Z *。当您使用*zp来引用指针时,您会得到一个Z &operator()被重载了。

不幸的是,您不能重载指针类型的运算符(我认为这与指针不是用户定义的类型有关,但我面前没有标准)。您可以使用引用简化语法:

Z & r = *zp;
r(3);

关于c++ - 重载运算符(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8599436/

10-11 18:36