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