-1

假设我有:

Foo foo;

有这个的简写吗?

foo.operator->().operator()(1, 2);
4

3 回答 3

6

嗯,是。较短的形式看起来像

foo.operator->()(1, 2)

至于消除operator ->部分...从您迄今为止提供的信息来看,这是不可能的,但如果它是按照我可以猜到的方式实现的(从您的表达来看),那么您就无法消除它。

在 C++->中,表达式中重载运算符的使用被解释为一连串重复的重载->调用,最终以内置->调用结束。这意味着在某些时候重载->必须返回一个指针。您的重载->显然不会返回指针。因此,为了使用它,您别无选择,只能将其明确拼写为operator ->().

于 2010-04-04T00:37:39.823 回答
3

假设您实际上是这样想 foo.operator->().operator()(1, 2)的,并且您可以控制该类Foo,则更简单的形式将是(*foo)(1, 2)。虽然它需要operator*定义的 ,但由于我们通常期望foo->bar等价于(*foo).bar,这似乎是合理的。

如果你Foo是某种智能指针类,它指向一个定义 . 的对象operator(),这将是调用对象的operator().

但是如果没有更多细节(并且没有你提供一个实际上是有效的 C++ 的表达式——operator(1, 2)正如你所写的那样,它不可能是有效的),就不可能回答你的问题。我只是在猜测你想要做什么。

于 2010-04-04T00:48:25.883 回答
0

好吧,不,但是,假设你对类有写权限,你可以定义另一个调用 operator() 的成员函数,然后你会有类似的东西:

foo->myfunc(1,2);

你发现自己处于这个位置表明你(或编写这个类的人)对运算符重载有点太可爱了。

于 2010-04-04T01:26:44.143 回答