从静态成员函数访问 'this' 指针
Accessing 'this' pointer from a static member function
我正在尝试为我的 class (C++) 创建一个生成器(设计模式)。
我有一个名为 BookBuilder::start() 的函数,它被定义为静态函数,它 return 是一个 BookBuilder
BookBuilder BookBuilder::start()
{
mybook = new Book;
return *this;
}
但是我无法编译代码,因为静态成员函数无法访问 this
指针。如果我无法访问 BookBuilder,我该如何 return?构建器的最终用法如下所示:
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();
class BookBuilder 的私有部分仅包含一个指向 Book 的变量。
Book* mybook;
我想你的意思是 returning *mybook
。你的第一行实例化了一个新的 Book
并且大概这就是你应该从你的函数中 returning 的东西。如果这是正确的,您还应该将函数的 return 类型从 BookBuilder
更改为 Book
.
this
指针指向当前实例,但是static
函数没有当前实例。 BookBuilder::start
是在 class 本身上定义的,并且 运行 没有引用 BookBuilder
.
的任何特定实例
只是return一个新构造的对象:
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++ 应该很容易。
我正在尝试为我的 class (C++) 创建一个生成器(设计模式)。 我有一个名为 BookBuilder::start() 的函数,它被定义为静态函数,它 return 是一个 BookBuilder
BookBuilder BookBuilder::start()
{
mybook = new Book;
return *this;
}
但是我无法编译代码,因为静态成员函数无法访问 this
指针。如果我无法访问 BookBuilder,我该如何 return?构建器的最终用法如下所示:
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();
class BookBuilder 的私有部分仅包含一个指向 Book 的变量。
Book* mybook;
我想你的意思是 returning *mybook
。你的第一行实例化了一个新的 Book
并且大概这就是你应该从你的函数中 returning 的东西。如果这是正确的,您还应该将函数的 return 类型从 BookBuilder
更改为 Book
.
this
指针指向当前实例,但是static
函数没有当前实例。 BookBuilder::start
是在 class 本身上定义的,并且 运行 没有引用 BookBuilder
.
只是return一个新构造的对象:
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++ 应该很容易。