一个工厂类

[复制链接]
 楼主| keer_zu 发表于 2022-9-15 14:54 | 显示全部楼层 |阅读模式
  1. class FactoryManager {
  2. public:
  3.     template <typename ProductCreator, typename AbstractProduct>
  4.     void Register(const std::string& name) {
  5.         if (IsRegistered(name)) {
  6.             LOGE("failed to register %s, already registered.", name.c_str());
  7.             NBASSERT(0);
  8.         }
  9.         /*LDRA_NOANALYSIS*/
  10.         producers_[name] = []() -> AbstractProduct* {
  11.             return new ProductCreator();
  12.         };
  13.         /*LDRA_ANALYSIS*/
  14.     }

  15. template <typename AbstractProduct>
  16. AbstractProduct* CreateObject(const std::string& name) {
  17.     if (IsRegistered(name)) {
  18.         return reinterpret_cast<AbstractProduct*>(producers_[name]());
  19.     } else {
  20.         return nullptr;
  21.     }
  22. }

  23. bool IsRegistered(const std::string& name) {
  24.     return producers_.count(name) > 0;
  25. }

  26. private:
  27.     std::unordered_map<std::string, std::function<void* ()>> producers_;
  28.     DECLARE_SINGLETON(FactoryManager)
  29. };
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部