
Hi; The program belows compiles and works but I'd like to simplify it, maybe using MPL. I spent some fascinating time educating myself on MPL, reading C++ Template Metaprogramming, but I am still at sea... to say the least. Basically the Functor contains a switch statement that is not convenient especially as the number of T classes will increase dramatically. Many thanks for any help on that JCR #include <iostream> #include <vector> #include <boost/mpl/vector.hpp> struct Tbase { Tbase() { std::cout << "Tbase" << std::endl; } }; struct T0 : public Tbase { T0() { std::cout << "T0" << std::endl; } }; struct T1 : public Tbase { T1() { std::cout << "T1" << std::endl; } }; typedef boost::mpl::vector<T0, T1> s; std::vector<Tbase*> vec; struct Functor { void operator()(const int& i) { switch(i) { case 0: vec.push_back(new T0); break; case 1: vec.push_back(new T1); break; } // I'd like to simplify the above swtich statement by writing something like: vec.push_back(new boost::mpl::at<s,i>::type); // but it does not compile and MinGW returns: // error: i cannot appear in a constant expression // error: template argument 2 is invalid. } }; int main (int argc, char ** argv) { std::vector<int> runtimeVec; runtimeVec.push_back(0); runtimeVec.push_back(1); runtimeVec.push_back(0); std::for_each(runtimeVec.begin(), runtimeVec.end(), Functor()); std::cout << vec.size() << std::endl; return 0; }