Boost logo

Boost Users :

From: Rubiphisto (snwcwt_at_[hidden])
Date: 2008-06-10 09:59:12


This isn't my desired answer, but thank you for your answer, however.
  ----- Original Message -----
  From: Oliver Seiler
  Newsgroups: gmane.comp.lib.boost.user
  To: boost-users_at_[hidden]
  Sent: Thursday, June 05, 2008 4:12 AM
  Subject: Re: A question about boost::bind function


  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 mailing list
  Boost-users_at_[hidden]
  http://lists.boost.org/mailman/listinfo.cgi/boost-users



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