是否可以制作一个复合模板类工厂而无需手动指定所有组合?我的意思是如果我有这些课程:
class CompositeBase {};
template< typename C1, typename C2, typename C3 >
class Composite : public CompositeBase
{
private:
C1 component1;
C2 component2;
C3 component3;
};
class Component0 {}; //Also have Component1-9
我想创建一个这样的函数:
CompositeBase *CreateComposite(int c1, int c2, int c3);
so that
CreateComposite(4,3,7);
将创建并返回一个
Composite<Component4,Component3,Component7>
这样做的原因是我可以从文件加载数据并创建不同的复合对象。该文件将包含用于创建每个复合对象的组件的三个值,然后是它所需的其他数据。
问题是对于 10 个不同的组件,有 1000 个不同的可能的复合类。要指定所有这些,需要为第一个组件使用一个 switch 语句,为该组件中的第二个组件使用 10 个 switch 语句,为这 10 个组件中的第三个组件使用 100 个 switch 语句,并且该函数的长度将超过 1000 行。
还有其他方法可以编写 CreateComposite 函数吗?除了这个:
CompositeBase *CreateComposite(int c1, int c2, int c3)
{
switch(c1)
{
case 0:
switch( c2 )
{
case 0:
switch( c3 )
{
case 0: return new Composite<Component0,Component0,Component0>;
case 1: return new Composite<Component0,Component0,Component1>;
//etc
}
//etc
}
//etc
}
}