【问题标题】:Dynamically generate new class objects from different classes从不同的类动态生成新的类对象
【发布时间】:2015-09-25 20:55:32
【问题描述】:

我目前正在为纸牌游戏编写模拟器。我正在尝试编写移动生成器。我有一个基类“卡片”,我从中派生出每张卡片(大约 150 种不同的卡片)。它们非常具体,因此我无法在单个类中实现它们(而且我不想使用任何脚本语言)。

我需要(想要)做什么: 代码 150 类派生自“卡”。现在我需要在运行时生成新对象并将它们推送到我的板上。

例如:

std::vector<Card*> board;
board.push_back(new Card132());

那么我怎么能做到这一点 - 因为我需要决定在运行时我需要生成哪个对象(从哪个类)?

提前致谢。

【问题讨论】:

  • Card132和CardNNN之间选择的依据是什么?
  • 这个设计有点味道,但你总是可以只使用一组工厂函数。
  • 首先考虑在你的向量中存储smart pointers。
  • 150 卡片的表示是可笑,我敢说没有必要!!!!学习继承、组合等,不要对你的代码一无所知。

标签: c++ object reflection polymorphism metaprogramming


【解决方案1】:

使用工厂模式。

每个类的对象都是静态实例化的,并将其自身注册到具有名称的映射中。所有类都派生自同一个基类。

当你想构造一个特定类型的对象时,将它的名称传递给工厂,查找类型,生成一个新类型并通过基指针对象返回它。

然后添加新卡就是编写一个新类并将其名称注册到工厂。

【讨论】:

    【解决方案2】:

    代码必须能够自己决定生成哪张卡片。

    if (want to generate card 1)
    {
        board.push_back(new Card1());
    }
    else if (want to generate card 2)
    {
        board.push_back(new Card2());
    }
    else if ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2021-09-07
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多