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