Re: How to use a class's member function in STL's algorithm?
On Jul 12, 4:54 am, "want.to.be.professer" <guolihui...@gmail.com>
wrote:
We know that alomost every algorithm function, such as for_each,
find_if, use funcional as well as function pointer. But when I want
to use another class's member function, how could I do?
See example:
class TestPrint
{
public:
TestPrint( int i ) { start_num = i; }
void print( int i )
{
cout << endl<< "| " << i +=
start_num <<
" |" << endl;
}
private:
int start_num;
};
int main()
{
TestPrint* pTest = new TestPrint( 8 );
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for_each( a, a + 9, /*** Use the pTest's "print" ***/ );
delete pTest;
return 0;
}
/*** Use the pTest's "print" ***/ is where I want to write code .
First the obvious:
struct foo
{
TestPrint* testPrint;
foo( TestPrint* tp ): testPrint( tp ) { }
void operator()( int i ) {
testPrint->print( i );
}
};
for_each( a, a + 9, foo( pTest ) );
the above structure can be built with the standard functional objects
as well:
for_each( a, a + 9, bind1st( mem_fun( &TestPrint::print ), pTest ) );
mem_fun wraps TestPrint::print into a function object that takes two
parameters (TestPrint* and int), and bind1st wraps the mem_fun into a
function object that always passes pTest as the first parameter.