【发布时间】:2018-01-02 14:04:51
【问题描述】:
我的确切问题有点难以解释,所以这里有一个简化版本: 我有各种类型的动物(模块)和一个庇护所(模块管理器)。这些包括狗,猫和鸟。所有者(父母)能够调用庇护所的功能,其中包括他想要采用的动物类型的字符串和通用项目列表(参考),以使动物的生活更轻松。物品清单是可变的,但必须包括所有且仅包括特定动物所需的所有物品,这些物品因动物而异(狗需要项圈和皮带,猫需要猫树和垃圾箱,鸟需要笼子等等..)。此列表还包括对所有者的引用,因此动物知道它属于谁。
基本上它应该是这样的:
Animal * getAnimal(String name, void * Items, int size_items)
//From Customer Class
Parrot * lester=dynamic_cast<Parrot*>(getAnimal("parrot", [this, new Cage()]))
现在我需要的是一种自动化工厂模式,它可以以某种方式将类存储在键值数组中,并能够使用它们的构造函数创建它们的实例,如下所示:
Parrot(void * items)
以后程序员应该可以在运行时通过调用将新类型的动物添加到庇护所
addAnimal(String Key, Class type)
我希望这能准确地解释我的问题。基本上我需要一种方法来创建父类的标准化子类,用户可以在其中添加更多子类而无需回到经典
if x=="Parrot" then return new Parrot(a)
【问题讨论】:
-
不使用boost的更详细的解释:blog.fourthwoods.com/2011/06/04/factory-design-pattern-in-c
-
感谢接缝有用
-
我不明白你希望用户在运行时创建新的动物,例如 dog(),而 dog 是一个继承自动物但你没有实现的新类?
-
我总是对常见的 OOP 示例(例如动物)感到困惑。制作父类动物和子类(例如狗或鹦鹉)对我来说意义不大。它们之间没有足够的共性,而且闻起来像 Java 'Object'。 C++ 不是这样的。
标签: c++ inheritance module