----- Original Message ----- 
From: "David Abrahams" <[EMAIL PROTECTED]>

> >> This is way too cool! Now we only need to provide such free-standing forms
> >> of all STL algorithms/member functions, and we will be living in a different
> >> world:
> >> 
> >>     std::vector<std::string> v;
> >> 
> >>     push_back(v, "text"); // plain call    
> >>     for_each(input, push_back(v, _1)); // currying
> >>     for_each(v, for_each(_1, print_char)); // more currying
> >>     // etc.!
> >> 
> >> Breathtaking, IMO.
> >
> > That was my intent. 
> 
> I'd like you to take my breath, too, but I'm not as quick as Aleksey.
> I tried to compile your code but I couldn't come up with a plausible
> definition for function<...>.  Could you fill in some details?

A good start is libs/phoenix/test/functors_tests.cpp 
and libs/phoenix/example/fundamental/sample3.cpp
There are jamfiles in there FWIW.

Here's sample3.cpp:

#include <vector>
#include <algorithm>
#include <iostream>
#include "boost/phoenix/functions.hpp"
#include "boost/phoenix/primitives.hpp"

using namespace std;
using namespace phoenix;

struct is_odd_ {

    template <typename ArgT>
    struct result { typedef bool type; };

    template <typename ArgT>
    bool operator()(ArgT arg1) const
    { return arg1 % 2 == 1; }
};

function<is_odd_> is_odd;

int
main()
{
    int init[] = { 2, 10, 4, 5, 1, 6, 8, 3, 9, 7 };
    vector<int> c(init, init + 10);
    typedef vector<int>::iterator iterator;

    //  Find the first odd number in container c
    iterator it = find_if(c.begin(), c.end(), is_odd(arg1));

    if (it != c.end())
        cout << *it;    //  if found, print the result
    return 0;
}

Cheers,
Joel de Guzman
[EMAIL PROTECTED]
http://www.boost-consulting.com




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to