How to compose functors with STL?

c++, composition, functor, stl

Solution

If you mean by using the functor composition facilities of the standard library, then no, at least not in C++98. In C++11 you could use `std::bind` for arbitrary composition of functors:

using std::placeholders;
int count = std::count_if(v.begin(), v.end(), 
                          std::bind(std::logical_and<bool>(), 
                                    std::bind(std::less<int>(), _1, 3), 
                                    std::bind(std::greater<int>(), _1, 0)));

But that doesn't really pay the headache for such a simple predicate.

If C++11 features are allowed, then the simplest way would probably be a lambda, no need to make a complex functor composition (yourself):

int count = std::count_if(v.begin(), v.end(), [](int arg) { 
                          return arg > 0 && arg < 3; });

But for C++98 Chubsdad's answer is probably the best solution.

Problem

The following is possible in STL: ``` int count = count_if(v.begin(), v.end(), bind2nd(less<int>(), 3)); ``` This returns the number of elements in v that are smaller than 3. How do compose a functor that returns the number of elements between 0 and 3? I know boost has some facilities for this but is it possible in pure STL?

Original source