为Foo
实现构建器的标准方法如下:
class Foo::Builder { public: Builder& setBar(bool bar); ... Foo build() const; };
仅在调用方尝试通过智能指针使用此类时:
auto builder = std::make_shared<Foo::Builder>()->setProperty(...);
不能以这种方式使用构建器,因为
setProperty()
将返回对该对象的引用,该对象在此语句完成执行时将被销毁。当调用方在同一条语句中调用build()
并且Builder
类从未绑定到变量名时,这没有关系。
但是,在我的应用程序中,我希望能够对派生的生成器对象进行一些配置,然后将其传递给另一个类的构造函数(该类将其作为指向基本类型的指针接收)。我还希望调用者能够确定所使用的指针的类型。我可以通过将Foo::Builder
用作模板来做到这一点吗?有没有更适合的设计模式呢?我愿意接受想法。
为Foo实现Builder的标准方法如下:class Foo :: Builder {public:Builder&setBar(bool bar); ... Foo build()const; };仅当呼叫者尝试使用此方法时...
拥有对他人用来指向实例的内容的控制权并不是阶级上的事。如果该其他类在其构造函数中接收到指向Builder
的指针,则可以使构造函数成为模板: