Boost logo

Boost Users :

From: Jaakko Järvi (jarvi_at_[hidden])
Date: 2006-05-25 19:33:34


On May 25, 2006, at 6:13 PM, Antonio Piccolboni wrote:

> I just wanted to transform a vector of integers into a vecotr of
> strings, doesn't seem to be asking much
>
> transform(ilabels.begin(), ilabels.end(), labels.begin(),
> lexical_cast<string>(_1));
>
> gcc 4.0.2 doesn't like it at all
>
> /usr/include/boost/lexical_cast.hpp:144: error: 'const class
> boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost
> ::lambda::bitwise_action<boost::lambda::leftshift_action>,
> boost::tuples::tuple<std::basic_stringstream<char,
> std::char_traits<char>, std::allocator<char> >&,
> boost::lambda::lambda_functor<boost::lambda::placeholder<1> >,
> boost::tuples::null_type, boost::tuples::null_type,
> boost::tuples::null_type, boost::tuples::null_type,
> boost::tuples::null_type, boost::tuples::null_type,
> boost::tuples::null_type, boost::tuples::null_type> > >' has no
> member named 'fail'
>
> <begin polemic, use flame retardant>
> Is it only me or does lambda lack orthogonality with anything else?
> Whenever I use lambda for anything non isomorphic to the the plain
> vanilla examples, the compiler goes ballistic
> <end polemic>
>

To make the above work, there would have to be an overload of
lexical_cast function that understands
what _1 is. Lambda and lexical_cast are separate libraries, which
were developed in isolation of each other,
and neither library has included such an overload. In the general
case, it is not a realistic expectation that every
function would be overloaded to accept placeholders.

bind helps in many cases. Try:

  boost::lambda::bind(&boost::lexical_cast<std::string, int>, _1)

(assuming that the value type of labels is int)

Best,

   Jaakko


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