Boost logo

Boost Users :

From: Oliver Seiler (oseiler_at_[hidden])
Date: 2008-06-04 16:12:22


Not sure why this was changed, though I've never used bind in this way
(specifically, to bind to a reference of a member variable).

Are you free to make changes to the code? This should work in either
version:

void AddUserAge( _sUserData& d ) { // <-- change this to a reference to the
struct
    ++d.age;
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<_sUserData> vUserData;
    for( int i = 0; i < 10; ++i )
        vUserData.push_back( _sUserData() );
    std::for_each( vUserData.begin(), vUserData.end(), boost::bind(
AddUserAge, _1 )); // <-- and remove the inner bind
    return 0;
}

Or you could just do this in 1.34.0 or higher:

#include <boost/foreach.hpp>
....
int _tmain(int argc, _TCHAR* argv[]) {
    std::vector<_sUserData> vUserData( 10 ); // vector of 10 _sUserData,
default constructed
    BOOST_FOREACH( _sUserData& d, vUserData ) ++d.age;
    return 0;
}

Of course, all this is starting to look like a homework problem to me...

2008/6/3 ·çÎèÓ°Ìì <snwcwt_at_[hidden]>:

> I'm a newbie in boost library and sorry for my poor English.
>
> I have a project now, it was created in Visual Studio.Net 2003 and the
> version of the boost library is 1.33.1, all thing is good. But, When I
> replaced the boost library with the new version 1.34.1 or 1.35.0, the
> project can't compiled correct. The error message is 'can't convert const
> sometype& to sometype&'. So, i force myself to read the source code of
> boost library and compare them betwwen version 1.33.1 and version 1.44.1.at last, I found the problem and written a test program. The following code
> is the test program:
>
> #include "stdafx.h"
> #include <boost/bind.hpp>
> #include <vector>
> #include <algorithm>
>
> struct _sUserData
> {
> int m_nUserId;
> int m_nUserAge;
> _sUserData()
> : m_nUserId( rand() )
> , m_nUserAge( rand()%100+1 )
> {
> }
> };
>
> void AddUserAge( int& age )
> {
> ++age;
> }
>
> int _tmain(int argc, _TCHAR* argv[])
> {
> std::vector<_sUserData> vUserData;
> for( int i = 0; i < 10; ++i )
> vUserData.push_back( _sUserData() );
> std::for_each( vUserData.begin(), vUserData.end(), boost::bind(
> AddUserAge, boost::bind( &_sUserData::m_nUserAge, _1 ) ) );
> return 0;
> }
> If i change the function AddUserAge( int& age ) to AddUserAge( const int&
> age ), all things is good. but I need change this parameter.
>
>



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