C ++简写操作符 - >操作符()

假设我有:

Foo foo;

有一个简写吗?

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

--------------解决方案-------------

假设你实际上意味着foo.operator->().operator()(1, 2)和你有过类的控制Foo ,一个简单的形式是(*foo)(1, 2) 它要求operator*来,虽然定义的,但由于我们通常希望foo->bar为等同于(*foo).bar似乎也在情理 ​​之中。

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

但是,如果没有更多的细节(没有你提供一个表达式,实际上是有效的C ++ -有没有办法这在operator(1, 2)因为你写它可以有效的),这是不可能回答你的问题。 我只是猜测你想要做的事。

嗯,是。 在较短的形式将如下

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

至于消除了operator ->部分......从信息您提供到目前为止,这是很难说,但如果实现了,我可以猜测它的实现方式(从你的表情来看),那么你就无法消除它。

在C ++中使用重载->运算符表达式被解释为一个链条的重复重载->电话,最终在一个内置的结束->调用。 这意味着,在某一点上过载->必须返回一个指针。 你超载->显然不返回一个指针。 因此,为了使用它,你没有其他选择,只能明确地拼写出来为operator ->()

哦,不,但是,假设你有写权限的类,你可以定义另一个成员函数调用运算符(),然后你会碰到这样的:

foo->myfunc(1,2);

那你发现自己在这个位置就是你(或谁写了这个类的人)是是有点太可爱了操作符重载的标志。

分类:C# 时间:2015-03-14 人气:0
本文关键词: C#,速记
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.378 (s). 10 q(s)