GenericFactory 类

template <typename BASE, typename IDENTIFIER = QString, typename... ARGUMENTS> class GenericFactory

The GenericFactory class implements a template-based generic factory. 详细...

公共类型

公共函数

虚拟~GenericFactory()
BASE *create(const IDENTIFIER &id, ARGUMENTS... args) const

受保护函数

详细描述

GenericFactory 是工厂模式的实现。它可用于生成具有常见超类 BASE 的不同类的实例。工厂的用户通过使用标识符 IDENTIFIER 在工厂中注册那些可生产的类。然后可以使用该标识符根据用户的需求生成尽可能多的已注册产品实例。

当衍生的 BASE 类的构造函数或注册的生成函数具有所有衍生的 BASE 类的共同签名时,一个工厂实例才能够生成衍生的不同类型的类实例。此签名由 ARGUMENTS 的声明顺序描述。在下文中引用为 SIGNATURE。

如果一个从 BASE 派生的类不包含与注册的构造函数或生成函数匹配的 SIGNATURE,那么无法使用 GenericFactory 子类的单个实例创建其实例。在这种情况下,需要多个 GenericFactory 子类和实例。

可以使用 registerProduct() 函数在 GenericFactory 子类的实例内部注册 BASE 的子类。以下条件之一必须满足:

  • 存在具有 SIGNATURE 的全局或静态函数。
  • DERIVED 类具有具有 SIGNATURE 的构造函数。
  • DERIVED 类具有具有 SIGNATURE 的静态函数。

要获取 DERIVED 的新实例,需要一个调用 create() 函数。IDENTIFIER 的值决定了工厂中注册的产品子类,而 SIGNATURE 的值是实际传递给类构造函数或注册的生成函数的实际参数。

成员类型文档

GenericFactory::FactoryFunction

此 typedef 定义了一个生成 BASE 类对象的工厂函数。

成员函数文档

[protected] GenericFactory::GenericFactory()

创建通用工厂。

[virtual] GenericFactory::~GenericFactory()

销毁通用工厂。

基础 *GenericFactory::create(const 标识符 &id, 参数... args) const

创建并返回由 id 指定、并通过对象构造函数传递的可变数量的参数 args 的类型,但会自动提升为 BASE 类型。该类型的所有权将转移给调用者。

©2021 The Qt Company Ltd。本文档中包含的贡献文档均为各自所有者的版权。所提供的文档于 Free Software Foundation 发布的 GNU 自自由文档许可证版本 1.3 的条款下提供。Qt Company、Qt 及其分别的标志是芬兰和/或在其他国家的 The Qt Company Ltd 的商标。所有其他商标均为其各自所有者的财产。