我正在尝试在C++中实现建造者模式。目前我已经得到了以下内容:
struct Person {
std::string name;
uint32_t age;
std::vector<std::string> pet_names;
};
class PersonBuilder {
public:
PersonBuilder& SetName(std::string name) {
person_.name = std::move(name);
return *this;
}
PersonBuilder& SetAge(uint32_t age) {
person_.age = age;
return *this;
}
PersonBuilder& SetPetNames(std::vector<std::string> pet_names) {
person_.pet_names = std::move(pet_names);
return *this;
}
Person Build() {
return Person(std::move(person_));
}
private:
Person person_;
};
int main() {
auto person = PersonBuilder()
.SetName("John")
.SetAge(23)
.SetPetNames({"rax", "rbx", "rcx"})
.Build();
return EXIT_SUCCESS;
}
我有点担心未使用的 uint32
,以及在 Build
方法中使用 std::move(person_)
。我这样做对吗?还是有更好的方法,比如使用结构体构造函数?
Person Build() { auto result = move(person_); person_ = Person(); return result; }
另外,Cleiton说要对Person的age
成员变量进行默认初始化。 - Eljay