2

简而言之,这就是我所得到的。

  1. 我有一个基础项目类,从中派生药水、设备、咒语等,并且从这些类派生了几个类,依此类推。注意:一些派生类具有非虚拟类特定的成员函数/数据类型。

  2. 我还创建了一个“随机”装甲/武器生成器。

我想要的是这样的库存:

struct Hero_Inventory
{
   std::vector<Spell*> Spell_Inventory;
   std::vector<Potion*> Potion_Inventory;
   std::vector<Equipment*> Equipment_Inventory; 

   Hero_Inventory() {}
};

为我的法术和药水创建一个容器(库存)非常简单。因为它们将是预定义的。使用多态性和指针不会有问题

我的主要问题是弄清楚如何存储和使用(例如访问武器类的特定成员函数)我随机生成的武器/盔甲(它们都是从设备派生的)。

我希望我所有的“设备”都放在一个容器中。

我在几个函数中生成了我所有的设备,所以当我完成生成过程并最终得到如下结果时:

Equipment * TestArmor = new Armor(/* Bunch of parameters go here */);

我不知道如何处理它,因为一旦该函数超出范围,我就会失去该指针。如果没有指针/引用,我就不能使用多态性,这使我可以将我的设备全部保存在一个容器中。

在这一点上我真的很迷茫,我正在寻找人们可以提出的任何建议或替代方案。如果您需要更多代码,我会发布它,只需告诉我您感兴趣的部分。

抱歉,如果我含糊不清,这是我的第一篇文章。我通常很擅长自己解决问题,但这件事让我胜过。如果有人需要更多信息,请询问,我会尽力提供。

在此先感谢,-瑞恩

4

1 回答 1

2

创建用于操作Equipment对象的统一接口:

class Equipment {
public:
    virtual void render(Renderer& renderer) = 0;
    virtual void createController(ControllerManager& controllerManager) = 0;
    virtual void load(std::istream& input) = 0;
    virtual void save(std::ostream& output) = 0;
};

该功能createController很有趣,因为设备将能够告诉ControllerManager如何创建将操纵其精确值的东西。

如果你想要一个允许与其他Equipment对象交互的函数,你可能需要Visitor Pattern. 这是一种基于多种类型而不是单一类型引入多态性的方法。

于 2013-01-17T08:06:19.977 回答