Boost logo

Boost :

From: Frederick Koh (fkoh_at_[hidden])
Date: 2001-07-05 21:16:32


I propose additions to the compose library to allow

(iterator_proxy<int>()>4) && (iterator_proxy<int>()<7)

as another way of writing

compose_f_gx_hx(logical_and<bool>(),bind2nd(greater<int>(),4),bind2nd(less<int>(),7))

Any interest in this. The code below illustrates this:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include "print.hpp"
#include "compose.hpp"
using namespace std;
using namespace boost;

template<typename A, typename B>
compose_f_gx_hx_t<logical_and<bool> ,A,B> operator&&(const A & a, const
B & b)
{
  return compose_f_gx_hx(logical_and<bool>(),a,b);
}

template<typename T>
struct iterator_proxy {
  typedef T return_type;
};

template<typename A, typename B>
binder2nd<greater<A::return_type> > operator>(const A & a, const B & b)
{
  return bind2nd(greater<A::return_type>(),b);
}

template<typename A, typename B>
binder2nd<less<A::return_type> > operator<(const A & a, const B & b)
{
  return bind2nd(less<A::return_type>(),b);
}

template<typename A, typename B>
compose_f_gx_hx_t<logical_or<bool> ,A,B> operator||(const A & a, const B
& b)
{
  return compose_f_gx_hx(logical_or<bool>(),a,b);
}

template<typename A, typename B>
binder2nd<greater_equal<A::return_type> > operator>=(const A & a, const
B & b)
{
  return bind2nd(greater_equal<A::return_type>(),b);
}

template<typename A, typename B>
binder2nd<less_equal<A::return_type> > operator<=(const A & a, const B &
b)
{
  return bind2nd(less_equal<A::return_type>(),b);
}

template<typename A, typename B>
binder2nd<equal_to<A::return_type> > operator==(const A & a, const B &
b)
{
  return bind2nd(equal_to<A::return_type>(),b);
}

int main()
{
    vector<int> coll;

    for (int i=1; i<=9; ++i) {
        coll.push_back(i);
    }
    PRINT_ELEMENTS(coll);

    vector<int>::iterator pos;

    pos = remove_if
(coll.begin(),coll.end(),iterator_proxy<int>()>4&&iterator_proxy<int>()<7);

    coll.erase(pos,coll.end());

    PRINT_ELEMENTS(coll);
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk