Using Boost::ref correctly..?

boost, c++

Solution

This what you really want:

for_each(lst.begin(), lst.end(), boost::bind<void>(boost::ref(val),_1  ) );

EDIT: Some explanation upon the OP's request. Recall that for_each() takes a function, but you were merely passing it a reference to your struct (yes, the struct has it's operator() overloaded but you were not passing that). bind() basically "exposes" the function inside your struct.

EDIT2: Explanation of the "_1" can be found in the comments below.

Problem

How can I get this to compile? The error is when I start using boost::ref(). I thought boost::ref is used to pass reference to C++ algorithm classes? ``` list<Object> lst; lst.push_back(Object(1,2.0f)); lst.push_back(Object(3,4.3f)); struct between_1_and_10 { int d; void operator() (Object& value) { value.a += 5; value.b -= 3.3f; cout << d << endl; d += value.a; } }; between_1_and_10 val; val.d = 4; for_each(lst.begin(), lst.end(), boost::ref(val)); // Problem is here printf("rg"); ``` EDIT Here's the compiler error as people suggested: ``` 1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\algorithm(29) : error C2064: term does not evaluate to a function taking 1 arguments 1> c:\users\swangrun\desktop\minescout work\feat-000-gettargetimages\minescouttest\maintest.cpp(102) : see reference to function template instantiation '_Fn1 std::for_each<std::list<_Ty>::_Iterator<_Secure_validation>,boost::reference_wrapper<T>>(_InIt,_InIt,_Fn1)' being compiled 1> with 1> [ 1> _Fn1=boost::reference_wrapper<main::between_1_and_10>, 1> _Ty=Object, 1> _Secure_validation=true, 1> T=main::between_1_and_10, 1> _InIt=std::list<Object>::_Iterator<true> 1> ] ```

Original source