在现代C ++设计中,Alexandrescu描述了对象工厂的缺点,设计如下:
class WidgetFactory
{
public:
virtual Window* CreateWindow() = 0;
virtual Button* CreateButton() = 0;
virtual ScrollBar* CreateScrollBar() = 0;
};
其中一个缺点是无法以通用方式创建窗口小部件:
template <class T>
T* MakeRedWidget(WidgetFactory& factory)
{
T* pW = factory.CreateT(); // huh???
pW->SetColor(RED);
return pW;
}
或
template <class T>
T* MakeRedWidget(WidgetFactory& factory)
{
T* pW = factory.Create<T>(); // aha!
pW->SetColor(RED);
return pW;
}
如果创建函数是函数模板。所以,他提出的解决方案是TypeList
。好的,我们现在有了类型列表概念,但是我们仍然不清楚如何创建一个通用对象工厂来解决有关通用小部件创建的问题。
template <class TList>
class WidgetFactory
{
//What??
}