Listing 4: Class order_by implementation
//order_by.h #ifndef __ORDER_BY_H__ #define __ORDER_BY_H__ #include <algorithm> #include <iterator> #include <Typelist.h> template <typename CONT, typename TLIST, int i = 0> class order_by { private: typedef typename CONT::iterator iter; enum{n = Loki::TL::Length<TLIST>::value}; typedef typename Loki::TL::TypeAt<TLIST, i>::Result comp_type; public: order_by(iter begin, iter end) { std::sort(begin, end, comp_type()); pair<iter, iter> range; while(true) { range = std::equal_range(begin, end, *begin, comp_type()); if(range.first == end) return; order_by<CONT, TLIST, ((i+1==n)?(0xFFFF):(i+1))> o(range.first, range.second); begin = range.second; } } }; //specialized object to end template recursion template <typename CONT, typename TLIST> class order_by<CONT, TLIST, 0xFFFF> { private: typedef typename CONT::iterator iter; public: order_by(iter begin, iter end){} }; #endif