从静态成员函数访问 '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++ 应该很容易。