我有这个声明
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/