Listing 5: Selection component using order_by objects

//person_sel.h

#ifndef __PERSON_SEL_H__
#define __PERSON_SEL_H__

#include <person.h>
#include <order_by.h>

template <typename CONT>
bool person_sel(CONT &container, int sort_order)
{
  switch(sort_order)
  {
    case 1://last only
    {
      order_by<CONT, TYPELIST_1(less_last)>
        o(container.begin(), container.end());
    }
    break;
    case 2://last, first, id
    {
      order_by<CONT, TYPELIST_3(less_last,
                                less_first,
                                less_id)>
        o(container.begin(), container.end());
    }
    break;
    case 3://state,zip,last,first,id
    {
      order_by<CONT, TYPELIST_5(less_state,
                                less_zip,
                                less_last,
                                less_first,
                                less_id)>
        o(container.begin(), container.end());
    }
    break;
    default:
      return false;
  }
  return true;
}

#endif