Boost logo

Boost Users :

Subject: Re: [Boost-users] [Lambda] Getting the bind incantation correct.
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2011-05-23 07:43:43


On Mon, May 23, 2011 at 11:42 AM, 肖锋 <xfxyjwf_at_[hidden]> wrote:

>
>
> On Mon, May 23, 2011 at 6:25 PM, Robert Jones <robertgbjones_at_[hidden]>wrote:
>
>> Hi All
>>
>> I'm trying to use std::vector::push_back() within a Boost.Lambda
>> expression, but am finding it impossible
>> to bind correctly. Can anyone tell me what I'm doing wrong in this code?
>>
>> Thanks in advance,
>>
>> - Rob.
>>
>> #include <vector>
>> #include <boost/function.hpp>
>> #include <boost/lambda/bind.hpp>
>>
>> void f( )
>> {
>> namespace ll = boost::lambda;
>> using boost::function;
>>
>> typedef unsigned char Id;
>> typedef std::vector<Id> Ids;
>>
>> ll::placeholder1_type x;
>>
>> Ids ids;
>> void ( Ids::* push_back )( const Ids::value_type & ) = &
>> Ids::push_back;
>>
>> function<void(Id)> my_push = ll::bind( push_back, ids, x ); // Line 18
>>
> Change ids to ll:var(ids) because the operation 'push_back' needs a mutable
> object.
>
>>
>> (void)my_push;
>> }
>>
>> > g++ ignore.cpp
>>
>> [...lots of template instantiation errors, then...]
>>
>> ignore.cpp:18: instantiated from here
>> /usr/include/boost/lambda/detail/actions.hpp:96: error: no matching
>> function for call to ‘boost::lambda::function_adaptor<void
>> (std::vector<unsigned char, std::allocator<unsigned char> >::*)(const
>> unsigned char&)>::apply(void (std::vector<unsigned char,
>> std::allocator<unsigned char> >::* const&)(const unsigned char&), const
>> std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned
>> char&)’
>> /usr/include/boost/lambda/detail/actions.hpp:96: error: return-statement
>> with a value, in function returning 'void'
>>
>>
>>
Ok, many thanks, that worked. But why isn't "ids" mutable on its own?

- Rob.



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