
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