我正在使用公司代码,我看到了:
ClassName(/* bunch of parameters */)
.someFunc(/* bunch of parameters */)
.someFunc(/* bunch of parameters */)
.someFunc(/* bunch of parameters */)
;
现在我从来没有见过这个并且不知道这样的东西可以工作(代码在公司解决方案中编译)所以我尝试了但是我没有运气。由于语法不正确,代码无法编译。我很困惑它如何处理公司的解决方案......?也许我忽略了什么?
答案 0 :(得分:10)
此技术称为Method Chaining。它基本上通过在您调用的每个方法中返回*this
的引用来工作。这允许您直接调用返回对象上的另一个方法(称为链接)。
答案 1 :(得分:4)
咦?这有什么奇怪的?这不仅仅意味着someFunc()
被声明为:
ClassName& someFunc(/*arguments*/)
{
/*do stuff*/
return *this;
}
为了支持链接?就像流媒体运营商一样?
答案 2 :(得分:1)
someObj.someFunc()
可能会返回对someObj
的引用,如下所示:
class ClassName {
ClassName &someFunc() {
return *this; // return current object, nothing created
}
};
ClassName someObj;
someObj.someFunc().someFunc(); // chain function calls on same object
ClassName().someFunc().someFunc(); // same, but now object is a temporary
这也适用于直接对象返回类型,而不是引用。在此模式中,可以在每个步骤修改对象。
class ClassName {
ClassName increment() const {
return *this + 1; // return a newly created object
}
};
ClassName someObj;
someObj.increment().increment(); // does not modify someObj, returns temporary
理解这些代码的关键在于查看感兴趣的函数的声明。