$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Jeff Flinn (TriumphSprint2000_at_[hidden])
Date: 2006-02-16 16:44:36
Rearranged reply:
Meryl Silverburgh wrote:
>
> On 2/16/06, Peter Dimov <pdimov_at_[hidden]> wrote:
>> Meryl Silverburgh wrote:
>>> Thanks how can I call a function with 2 more parameters, like this:
>>> How can I pass 'param1', 'param2' to the fuction doStuff?
>>>
>>> void A::aFunction( float param1, float param2) {
>>>
>>> vector<int> aVector;
>>> aVector.push_back(1);
>>> aVector.push_back(2);
>>> aVector.push_back(3);
>>> aVector.push_back(4);
>>>
>>> // want to loop thru the list and call A::print(int i,  float
>>> param1, float param2)?
>>
>>     for_each( aVector.begin(), aVector.end(),
>>         bind( &A::doStuff, this, _1, param1, param2 )
>>     );
>>
>>> }
>>>
>>>
>>> void A::doStuff(int i,  float param1, float param2) {
>>>
>>> }
> Thanks.  One more question, why the function 'doStuff' has to be
> 'public' otherwise, it won't compile?  In my example, aFunction is a
> member function of 'A', so I can put 'doStuff' as private, right? but
> that won't compile.
>
>>     for_each( aVector.begin(), aVector.end(),
>>         bind( &A::doStuff, this, _1, param1, param2 )
>>     );
>
> Can someone please tell me why?
Not sure what your exactly asking here.
for_each is expecting to call a function f( value_type& ), where in this 
case value type is an int. for_each call this function f for each 
derefrenced iterator in the sequence v.begin() to v.end(). The bind call 
above returns such a function, mapping the int in f, to the placeholder in 
the call to A::doStuff.
The assumption is made that A is a class rather than a name space, since you 
didn't post a complete example. So that makes A::doStuff a member function. 
Member functions take a this pointer as their hidden 1st argument. 
A::aFunction is assumed to be a member function as well so the this pointer 
is available.
 bind( &A::doStuff  // an A member function
     , this         // this instance of A's this pointer
     , _1           // the derefenced vector::iterator (an int )
     , param1       // the 1st float arg value
     , param2       // the 2nd float arg value
     )
Jeff Flinn