сцепление методов, включая конструктор классов - PullRequest
5 голосов
/ 20 мая 2010

Я пытаюсь реализовать цепочку методов в C ++, что оказывается довольно простым, если вызов конструктора класса является отдельным оператором, например:

Foo foo;

foo.bar().baz();

Но как только вызов конструктора становится частью цепочки методов, компилятор жалуется на ожидание ";" на месте "." сразу после вызова конструктора:

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

Теперь мне интересно, возможно ли это в C ++? Вот мой тестовый класс:

class Foo
{
public:
    Foo()
    {
    }

    Foo& bar()
    {
        return *this;
    }

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

Я также нашел пример "плавных интерфейсов" в C ++ (http://en.wikipedia.org/wiki/Fluent_interface#C.2B.2B), который, кажется, именно то, что я ищу. Однако я получаю ту же ошибку компилятора для этого кода.

Ответы [ 2 ]

11 голосов
/ 20 мая 2010

Попробуйте

// creates a temporary object
// calls bar then baz.
Foo().bar().baz();
8 голосов
/ 21 мая 2010

Вы забыли фактическое имя для объекта Foo. Попробуйте:

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