Re: вызов функций по указателю в for_each
От: Сыроежка  
Дата: 16.03.12 22:15
Оценка: -4 :)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.


А>Подскажите пожайлуста можно ли как нибудь реализовать следующее:


А>
А>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 );
}
Меня можно встретить на www.cpp.forum24.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.