所以这就是我所得到的。
我有一个基础项目类,从中派生出魔药,装备,法术等等,并从这些类派生出几个类等等。注意:某些派生类具有非虚拟类特定的成员函数/数据类型。
我还创造了一个“随机”装甲/武器发生器。
我想要的是像这样的库存:
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 */);
我不知道该怎么做,因为只要该功能超出范围,我就会松开那个指针。没有指针/引用我不能使用多态,这允许我将我的设备全部保存在一个容器中。
我现在真的迷失了,我正在寻找人们可以建议的任何建议或替代方案。如果您需要更多代码,我会发布它,只需告诉我您感兴趣的部分。
对不起,如果我一直含糊不清,这是我的第一篇文章。我通常很擅长自己解决问题,但这件事让我好斗。如果有人需要更多信息,我会尽力提供。
提前致谢, -Ryan
答案 0 :(得分: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
。这是一种基于多种类型而不是单一类型引入多态的方法。