$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Rodolfo Lima (rodolfo_at_[hidden])
Date: 2006-11-28 20:44:41
Hi, I'm trying to use boost::function with a functor defined with 
boost::lambda that uses a dereference to a pointer to member function, 
without success. Here goes what I've done up to now:
struct aux
{
    aux() : b(1) {}
    int a(int x) const { return x+5; }
    int b;
};
int main()
{
    aux a;
    int x = 4;
    // This compiles and executes as expected, we're dealing with a pointer 
to an attribute.
    boost::function<int(const aux &)> fa = &_1->*&aux::b;
    int ia = fa(a);
    cout << ia << endl;
    // This should compile, but doesn't
    boost::function<int(const aux &)> fm1 = (&protect(_1)->*&aux::a)(x);
    int im1 = fm1(a);
    cout << im1 << endl;
    // This works, but it's not what we want
    // To mimic c++0x auto type (with help of g++'s typeof)
    #define auto(var, def) typeof(def) var = def
    auto(fm2, &_1->*&aux::a);
    int im2 = fm2(a)(x);
    cout << im2 << endl;
    return 0;
}
By using protect I want to postpone the evaluation of _1 so that it'll occur 
after the evaluation of aux::a arguments, but it doesn't work. Does anyone 
can help me?
Thanks,
Rodolfo Lima.