Boost logo

Boost Users :

From: Chuck Messenger (yg-boost-users_at_[hidden])
Date: 2003-05-21 10:08:24


I'm trying to figure out how to do something like this:

     for_each(c.begin(), c.end(), cout << _1.member << "\n");

which is obviously wrong, but hopefully you know what I mean...

Experimenting with ways of accessing members inside a lambda, I wrote
the following:

     #include <iostream>
     #include <boost/lambda/lambda.hpp>
     #include <vector>

     using namespace std;
     using namespace boost;
     using namespace lambda;

     struct XX {
         XX(int a, int b) { a_ = a; b_ = b; }
         int a_;
         int b_;
     };

     int main() {
         XX xx(5, 6);
         XX *xxp = &xx;

         cout << "These should all be equivalent:\n";
         cout << xxp ->* &XX::a_ << endl;
         cout << (_1 ->* &XX::a_)(xxp) << endl;
         //cout << (_1 ->* &XX::a_)(&xx) << endl; // Doesn't compile!
         cout << (&_1 ->* &XX::a_)(xx) << endl;

         cout << "Now, let's try with the vector:\n";

         vector<XX> xxVec;
         xxVec.push_back(XX(3, 4));

         cout << (&_1 ->* &XX::a_)(xxVec[0]) << endl;
         //cout << (_1 ->* &XX::a_)(&xxVec[0]) << endl; // Doesn't compile!
         cout << (_1 ->* &XX::a_)(xxp = &xxVec[0]) << endl; // Now it
compiles...
         //cout << (_1 ->* &XX::a_)(xxVec.begin()) << endl; //
Doesn't compile!
         //cout << (_1 ->* &XX::a_)(&*xxVec.begin()) << endl; //
Still not...
         cout << (_1 ->* &XX::a_)(xxp = &*xxVec.begin()) << endl; // Now
it compiles...

         exit(0);
     }

I'm mystified by why some of these lines don't compile (gcc 3.2.2). Can
anyone explain it? The compiler generates some horrific error messages
-- I haven't tried to pick through them yet...

     - Chuck


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net