// compile: g++ -std=c++11 metafunctor.cpp #include <iostream> #include <map> // ************************************************************** // **********************TEMPLATE FOR**************************** // ************************************************************** template <template<int> class Func, int... IDs> class ForFunctor; template <template<int> class Func, int ID, int... IDs> class ForFunctor<Func,ID,IDs...> { public: template <typename... Params> static void with(Params& ...params) { Func<ID>::op(params...); ForFunctor<Func,IDs...>::with(params...); } }; template <template<int> class Func> class ForFunctor<Func> { public: template <typename... Params> static void with(Params& ...params) {} }; // ************************************************************** // **********************SOME FUNCTORS**************************** // ************************************************************** template <int ID> class Init { public: template <typename OUT> static void op(OUT& out) { out[ID] = ID; } }; template <int ID> class CopyID { public: template <typename OUT, typename IN> static void op(OUT& out,IN& in) { out[ID] = in[ID]; } }; // ************************************************************** // ***************************MAIN******************************* // ************************************************************** int main() { typedef std::map<int,int> A; A a; A b; ForFunctor<Init,1,2,6,3,10>::with(a); ForFunctor<CopyID,1,2,6>::with(b,a); std::cout << "a: "; for (auto value: a) std::cout << value.second << " "; std::cout << "\nb: "; for (auto value: b) std::cout << value.second << " "; std::cout << "\n"; }
Sunday, December 13, 2015
Varaidic templated template parameters for a loop unroller/code repeater
This basically a demonstration how to use variadic templated template parameter in combination with a variadic template outer handler that locks the typing of the inner part into place with automatic type resolution. This application is basically demonstrating how to create a static loop unroller or code repeater...
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment