On Mon, May 23, 2011 at 11:42 AM, 肖锋 <xfxyjwf@gmail.com> wrote:On Mon, May 23, 2011 at 6:25 PM, Robert Jones <robertgbjones@gmail.com> wrote:
Hi AllI'm trying to use std::vector::push_back() within a Boost.Lambda expression, but am finding it impossibleto 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 18Change 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?