Boost logo

Boost :

From: Justinas V.D. (vygintas.daugmaudis_at_[hidden])
Date: 2004-04-29 14:05:19


Hello,

Perhaps it's just me being inattentive or Boost.Lambda lacks some
feature I would consider quite useful. Rummaging through documentation
and source code did not turn out to be constructive.

Well, the problem is:

struct foo
{
    template<typename ExprT>
    typename ExprT::result_type operator[](ExprT expr)
    {
          return expr(/*params here*/);
    }
};

Umm... We can write as follows then:

foo bar;

bar[
    some_stl_conformant_unary_functor() // or binary, or whatever...
compiles OK
];

It would be nice to write little lambda expressions too,
bar[
    std::cout << _1 // Fails miserably
];
for example.

The problem is that lambda expressions do not have result_type defined
although technically they are functors too (like STL functors). It would
be trivial to write little metafunction wrapper though. After all,
boost::lambda::is_lambda_functor metafunction exists but I haven't found
lambda_result_type traits or something like that. Documentation
conveniently skips through that part of implementation and code is a bit
obscure at times.

Is there a way to implement such a metafunction

    boost::lambda::functor_result<T>::type that it would return result
type of lambda expression if T is lambda
    expression or T::result_type if T is ordinary STL functor, or just
null_type if neither of them?

that its implementation would not turn out to be a pain in the... emm...
neck? Or perhaps this could be a part of Boost.Lambda library?

Regards,
Justinas V.D.


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