Вам нужны интерфейсы для всех типов:
class ModelIface
{
}
class ModelA : public ModelIface
{
ModelA(int a);
}
class ModelB : public ModelIface
{
ModelB(int a,int b);
}
class ViewIface
{
}
class ViewModelA : public ViewIface
{
ViewModelA(ModelIface* ma);
}
class ViewModelB : public ViewIface
{
ViewModelB(ModelIface* mb);
}
class ViewFactory
{
ViewIface * create(ModelIface *ma)
{
switch(ma.type)
{
case TYPE1:
return new ViewModelA(ma);
case TYPE2:
return new ViewModelB(ma);
default :
;
}
return nullptr;
}
}
Являются ли TYPE1 и TYPE2 int или enum не имеет значения.
int main(int argc, char *argv[])
{
ModelIface *ma = new ModelA(10);
ModelIface *mb = new ModelB(10,11);
ViewFactory myFactory;
ViewModelIface *va = myFactory.createFromModel(ma);
ViewModelIface *vb = myFactory.createFromModel(mb);
//va should be a model of ViewModelA and vb a model of ViewModelB
}