这是我的问题。 我正在创建自己的 GUI Api。所有的小部件都在一个具有添加和删除功能的容器中。小部件派生自小部件基类。这是我不确定的地方。我理想情况下喜欢这样的流程: 用户创建一个(从基类派生的所需小部件)指针,容器分配和管理资源,用户有一个指向小部件的指针并可以调用它。
然而,多态性使这一点变得困惑。我怎样才能让我的容器创建正确类型的新容器?这里的问题是任何人都可以创建一个新的小部件(如 SuperTextBoxWidget),这就是为什么提供一个字符串并进行切换不能解决这个问题。
我的另一个快速修复方法是让用户负责执行新操作,并提供指向容器添加函数的指针。但这对我来说并不是白痴证明,让用户进行初始分配似乎很奇怪,但容器会管理其余部分,包括删除。
解决此问题的最佳和最简洁的方法是什么?
谢谢
只是我到目前为止的想法:
class AguiWidgetContainer
{
std::vector<AguiWidgetBase*> widgets;
public:
AguiWidgetContainer(void);
~AguiWidgetContainer(void);
void handleEvent(ALLEGRO_EVENT* event);
int add(AguiWidgetBase *widget);
bool remove(int widgetId);
};
最佳答案
我至少可以想到两种方法。
<强>1。提供add
的模板版本:
template<class T>
int add() {
widgets.push_back(new T);
}
<强>2。使用工厂类:
你可以有一个base factory class它定义了分配(也可能是免费的)小部件的方法。然后您的用户提供他们自己的工厂子类来创建正确类型的小部件。例如:
class AguiWidgetFactory {
AguiWidgetBase *createWidget() = 0;
};
class AguiSuperWidgetFactory : public AguiWidgetFactory {
AguiWidgetBase *createWidget() {
return new SuperTextBoxWidget();
}
};
然后您的 add
方法将一个工厂对象作为输入并使用它来创建一个新的小部件。
关于c++ - 帮助解决这个问题(指针和多态性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868883/