方法链接包括类构造函数

jen*_*ena 5 c++ methods constructor chaining

我正在尝试在C++中实现方法链接,如果类的构造函数调用是一个单独的语句,结果很容易,例如:

Foo foo;

foo.bar().baz();
Run Code Online (Sandbox Code Playgroud)

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

Foo foo().bar().baz();
Run Code Online (Sandbox Code Playgroud)

我现在想知道这在C++中是否真的可行.这是我的测试类:

class Foo
{
public:
    Foo()
    {
    }

    Foo& bar()
    {
        return *this;
    }

    Foo& baz()
    {
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

我还在C++(http://en.wikipedia.org/wiki/Fluent_interface#C.2B.2B)中找到了一个"流畅的接口"的例子,这似乎正是我正在寻找的.但是,我得到该代码的相同编译器错误.

Mar*_*ork 11

尝试

// creates a temporary object
// calls bar then baz.
Foo().bar().baz();
Run Code Online (Sandbox Code Playgroud)

  • 这里没有明确定义.由于临时对象在语句结束前仍然有效(';').一切都是爱情和临时的. (5认同)

abl*_*eul 8

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

Foo foo = Foo().bar().baz();
Run Code Online (Sandbox Code Playgroud)

  • 或者,您可以保存对象的(const)引用,而不是将临时文件复制到新变量中. (5认同)