假设我有:
Foo foo;
有这个的简写吗?
foo.operator->().operator()(1, 2);
嗯,是。较短的形式看起来像
foo.operator->()(1, 2)
至于消除operator ->
部分...从您迄今为止提供的信息来看,这是不可能的,但如果它是按照我可以猜到的方式实现的(从您的表达来看),那么您就无法消除它。
在 C++->
中,表达式中重载运算符的使用被解释为一连串重复的重载->
调用,最终以内置->
调用结束。这意味着在某些时候重载->
必须返回一个指针。您的重载->
显然不会返回指针。因此,为了使用它,您别无选择,只能将其明确拼写为operator ->()
.
假设您实际上是这样想 foo.operator->().operator()(1, 2)
的,并且您可以控制该类Foo
,则更简单的形式将是(*foo)(1, 2)
。虽然它需要operator*
定义的 ,但由于我们通常期望foo->bar
等价于(*foo).bar
,这似乎是合理的。
如果你Foo
是某种智能指针类,它指向一个定义 . 的对象operator()
,这将是调用对象的operator()
.
但是如果没有更多细节(并且没有你提供一个实际上是有效的 C++ 的表达式——operator(1, 2)
正如你所写的那样,它不可能是有效的),就不可能回答你的问题。我只是在猜测你想要做什么。
好吧,不,但是,假设你对类有写权限,你可以定义另一个调用 operator() 的成员函数,然后你会有类似的东西:
foo->myfunc(1,2);
你发现自己处于这个位置表明你(或编写这个类的人)对运算符重载有点太可爱了。