2013-03-13 4 views
1

В Java это возможно для методов строители инкубационных вернуть сам строитель, так что вызовы могут быть соединены, например, так:Может ли C++ сделать этот шаблон java-строителя?

public class builder{ 

private String name; 
private int age; 
private char glyph; 

    public builder setName(String name){ 
    this.name = name; 
     return this; 
    } 

    public builder setAge(int age){ 
     this.age = age; 
     return this; 
    } 

public builder setGlyph(char glyph){ 
    this.glyph = glyph; 
    return this; 
} 

public static void main(String[] args){ 
    builder b = new builder().setName("").setAge(10).setGlyph('%'); 
} 
} 

Возможно ли это в C++?

+0

Вы можете использовать constuctor с этими тремя аргументами – duffy356

+0

Ваш метод 'setGlyph' имеет' builder' как свой объявленный тип возврата, но не возвращается. Это интенсиональность? – mbatchkarov

+0

Если это возможно в Java, то возможно _must_ быть в C++. Это также должно быть возможно в Assembler :-)! – sk2212

ответ

6

Да, конечно, вы можете просто вернуть ссылку строителю:

Builder & setSomething(const std::string & smth) 
{ 
    // do setting 
    return *this; 
} 
+0

Большое вам спасибо, я никогда не знал, что это ключевое слово в C++! – user2103959

+1

@ user2103959 Просто помните, что 'this' является указателем и должен быть разыменован' * ', чтобы получить сам объект' builder'. –

+0

Очень нубийский вопрос, я думаю, но зачем нужен заголовок & before method? – user2103959

2

Да, функция цепочки, конечно, возможно. Реализация setName, например, будет выглядеть следующим образом:

builder& setName(std::string name) 
{ 
    this->name = name; 
    return *this; 
} 

Он возвращает ссылку на указатель на объект к по this, которая, конечно, текущий объект.

+0

Большое спасибо! – user2103959

Смежные вопросы