Hi all,
I am currently completly lost with boost::preprocessor. I am trying to automatically generate a switch ... case structure with this lib and I cannot figure how I can do what I want.
Here is the problem. I have a class templated over 2 parameters (in reality, more ...). At run time, I need to choose a specific instanciation for a user given values. An example :
class MyDataEnergy
{
// ...
};
class AnotherDataEnergy
{
// ...
};
class MyPriorEnergy
{
// ...
};
class AnotherPriorEnergy
{
// ...
};
template <typename DataEnergyType , typename PriorEnergyType> class MyModel : public DataEnergyType , public PriorEnergyType
{
// ...
};
Now, somewhere in the code, a user specifies which energies to use, and I have to instanciate MyModel with those energies:
// ...
int priorType = ValueComingFromSomewhere();
int dataType = AnotherValueComingFromSomewhere();
switch(priorType)
{
case 0:
switch(dataType)
{
case 0:
{
MyModel<MyPriorEnergy,MyDataEnergy> aModel;
aModel.SetInput(...);
aModel.Optimize(...);
}
break;
case 1:
{
MyModel<MyPriorEnergy,AnotherDataEnergy> aModel;
aModel.SetInput(...);
aModel.Optimize(...);
}
break;
default:
break;
}
case 1:
switch(dataType)
{
case 0:
{
MyModel<MyPriorEnergy,MyDataEnergy> aModel;
aModel.SetInput(...);
aModel.Optimize(...);
}
break;
case 1:
{
MyModel<MyPriorEnergy,AnotherDataEnergy> aModel;
aModel.SetInput(...);
aModel.Optimize(...);
}
break;
default:
break;
}
default:
break;
}
I would like to know if there is a way to automate the above switch generation. As I have 5 templates, and not only 2, this will really helps ... I tried using BOOST_PP_SEQ_FOR_EACH but did not came to a result.
Then, there is a lot of duplication in the above code. Am I doing the right way ?
Hope you could help,
Best regards,
Olivier
--
Dr. Olivier Tournaire
Chargé de recherches
MATIS - Institut Géographique National
73, Ave de Paris
94165 St Mandé cedex, France
tel: (+33) 1 43 98 80 00 - 71 25
fax: (+33) 1 43 98 85 81