我正在尝试为我的类(C ++)创建一个Builder(设计模式)。 我有一个名为BookBuilder :: start()的函数,它被定义为静态函数,它返回一个BookBuilder
BookBuilder BookBuilder::start()
{
mybook = new Book;
return *this;
}
但我无法编译代码,因为静态成员函数无法访问this
指针。如果我无法访问BookBuilder,我该怎么办?构建器的最终用法如下所示:
Author* markTwain = new Author("Mark Twain", "twain@google.com", MALE);
Book* tomSawyer = BookBuilder::start()
.withTitle("The Adventures of Tom Sawyer")
.publishedBy("American Publishing Company")
.writtenBy(*markTwain)
.genre("Adventure")
.isbn(68934)
.hasPrice(100.99)
.allocate();
类BookBuilder的私有部分只包含一个变量,它是指向Book的指针。
Book* mybook;
答案 0 :(得分:0)
我认为你的意思是回归*mybook
。你的第一行实例化了一个新的Book
,大概是你应该从你的函数返回的东西。如果这是正确的,您还应该将函数的返回类型从BookBuilder
更改为Book
。
this
指针指的是当前实例,但static
函数没有当前实例。 BookBuilder::start
是在类本身上定义的,并且在不引用BookBuilder
的任何特定实例的情况下运行。
答案 1 :(得分:0)
只需返回一个新构造的对象:
BookBuilder BookBuilder::start()
{
return new BookBuilder();
}
但你的功能很奇怪。在构建器模式中,您可以在build()
方法中构造所需的实例。之前您只需提供构造最终对象所需的元素。见简单示例:
class BookBuilder {
private String title;
private BookBuilder() {
}
public static BookBuilder start() {
return new BookBuilder();
}
public BookBuilder withTitle(final String title) {
this.title = title;
return this;
}
public Book allocate() {
return new Book(title);
}
}
此代码是用Java编写的。将它转换为C ++应该很容易。