Здравствуйте, Аноним, Вы писали:
А>Здравствуйте.
А>Подскажите пожайлуста можно ли как нибудь реализовать следующее:
А>А>typedef void (*TRC_can)(const scanmsg_t* _msg);
А>typedef list<TRC_can> l_rc_func;
А>l_rc_func l_temp;
А>void rc_msg(const scanmsg_t* _msg)
А>{
А> l_rc_func::iterator i_cur = l_temp.begin();
А> for ( ; i_cur != l_temp.end(); ++i_cur)
А> (*i_cur)(_msg);
А>}
А>
А>только через алгоритм for_each(l_temp.begin(), l_temp.end(), ....).
А>Пытался через boost::bind, но так и не понял как вызвать код (*i_cur)(_msg) ?????
Вот простой пример, скомпилированный с помощью MS VC++ 2010. И мой вам совет на будущее, не используйте boost.
#include "stdafx.h"
#include <iostream>
#include <list>
#include <algorithm>
typedef void ( *pf )( int );
void f1( int x )
{
std::cout << "f1( int )\n";
}
void f2( int x )
{
std::cout << "f2( int )\n";
}
void f3( int x )
{
std::cout << "f1( int )\n";
}
void fn( const std::list<pf> &l, int x )
{
std::for_each( l.begin(), l.end(),
[&x]( pf f ){ f( x ); } );
}
int _tmain(int argc, _TCHAR* argv[])
{
std::list<pf> l;
l.push_back( f1 );
l.push_back( f2 );
l.push_back( f3 );
fn( l, 10 );
куегкт ( 0 );
}