
Hi All Ok, now I've found out what is really stopping my real code working. In this example my problem is that method has defaulted arguements, which I think mucks up bind's signature matching. Is there an easy way round this, or must I just add appropriate overloads of double_it to A? Thanks, Rob. #include <algorithm> #include <vector> #include "boost/bind.hpp" struct A { int double_it( int i, int j = 2 ) { return i * j; } } a; std::vector< int > v; int main( ) { for ( std::vector< int >::iterator i = v.begin( ); i != v.end( ); ++ i ) { a.double_it( * i ); } // Write it as a for_each/bind std::for_each( v.begin(), v.end(), boost::bind( & A::double_it, boost::ref( a ), _1 ) ); } -- ACCU - Professionalism in programming - http://www.accu.org

On Tue, Mar 23, 2010 at 4:29 AM, Robert Jones
Hi All
Ok, now I've found out what is really stopping my real code working.
In this example my problem is that method has defaulted arguements, which I think mucks up bind's signature matching. Is there an easy way round this, or must I just add appropriate overloads of double_it to A?
Thanks, Rob.
#include <algorithm> #include <vector> #include "boost/bind.hpp"
struct A { int double_it( int i, int j = 2 ) { return i * j; } } a;
std::vector< int > v;
int main( ) { for ( std::vector< int >::iterator i = v.begin( ); i != v.end( ); ++ i ) { a.double_it( * i ); }
// Write it as a for_each/bind std::for_each( v.begin(), v.end(), boost::bind( & A::double_it, boost::ref( a ), _1 ) ); }
C++ type signatures do not see optional parameters, thus, pretend that your function does not have a default value: #include <algorithm> #include <vector> #include "boost/bind.hpp" struct A { int double_it( int i, int j = 2 ) { return i * j; } } a; std::vector< int > v; int main( ) { for ( std::vector< int >::iterator i = v.begin( ); i != v.end( ); ++ i ) { a.double_it( * i ); } // Write it as a for_each/bind std::for_each( v.begin(), v.end(), boost::bind( & A::double_it, boost::ref( a ), _1, 2 ) ); }

On Sat, Mar 27, 2010 at 3:43 AM, OvermindDL1
C++ type signatures do not see optional parameters, thus, pretend that your function does not have a default value:
#include <algorithm> #include <vector> #include "boost/bind.hpp"
struct A { int double_it( int i, int j = 2 ) { return i * j; } } a;
std::vector< int > v;
int main( ) { for ( std::vector< int >::iterator i = v.begin( ); i != v.end( ); ++ i ) { a.double_it( * i ); }
// Write it as a for_each/bind std::for_each( v.begin(), v.end(), boost::bind( & A::double_it, boost::ref( a ), _1, 2 ) ); }
Excellent, that is genuinely useful info, thanks. I've actually rewritten my code to avoid the need for binding with defaulted args, but at least I now know how to do it. - Rob. -- ACCU - Professionalism in programming - http://www.accu.org
participants (2)
-
OvermindDL1
-
Robert Jones