Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包括类构造函数的方法链接 我试图在C++中实现方法链,如果类的构造函数调用是一个单独的语句,例如:,那么这将是非常容易的。 Foo foo; foo.bar().baz();_C++_Constructor_Methods_Chaining - Fatal编程技术网

包括类构造函数的方法链接 我试图在C++中实现方法链,如果类的构造函数调用是一个单独的语句,例如:,那么这将是非常容易的。 Foo foo; foo.bar().baz();

包括类构造函数的方法链接 我试图在C++中实现方法链,如果类的构造函数调用是一个单独的语句,例如:,那么这将是非常容易的。 Foo foo; foo.bar().baz();,c++,constructor,methods,chaining,C++,Constructor,Methods,Chaining,但一旦构造函数调用成为方法链的一部分,编译器就会抱怨在构造函数调用之后立即使用“;”代替“.”: Foo foo().bar().baz(); 现在我想知道这是否是C++中可能的。这是我的测试课: class Foo { public: Foo() { } Foo& bar() { return *this; } Foo& baz() { return *this; }

但一旦构造函数调用成为方法链的一部分,编译器就会抱怨在构造函数调用之后立即使用“;”代替“.”:

Foo foo().bar().baz();
现在我想知道这是否是C++中可能的。这是我的测试课:

class Foo
{
public:
    Foo()
    {
    }

    Foo& bar()
    {
        return *this;
    }

    Foo& baz()
    {
        return *this;
    }
};

我还找到了C++中的“流畅界面”的例子,这似乎正是我正在寻找的。但是,对于该代码,我得到了相同的编译器错误。

试试看

// creates a temporary object
// calls bar then baz.
Foo().bar().baz();

您忘记了
Foo
对象的实际名称。尝试:

Foo foo = Foo().bar().baz();

哦,我忘了提到这个:VisualStudio2010(专业版).Foo-Foo=bar().baz().bang();虽然在这种情况下,返回对临时对象的引用有点不可靠;-)不,这里定义得很清楚。因为临时对象在语句结尾(“;”)之前保持有效。一切都是爱和临时变量。或者你可以保存对对象的(const)引用,而不是将临时变量复制到新变量中。@LokiAstari:不幸的是,没有,因为baz返回对临时变量的引用,而不是临时变量。(我自己也犯了同样的错误)