c ++简写操作符 - >运算符()

时间:2010-04-04 00:33:49

标签: c++ shorthand

假设我有:

Foo foo;

有这方面的简写吗?

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

3 个答案:

答案 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);

你发现自己处于这个位置是一个迹象,表明你(或者写这个课程的人)在操作员重载时有点太可爱了。