stl::mem_ptr
От: User99  
Дата: 20.05.04 11:38
Оценка:
Доброго времени суток.
Сперва кусок кода:
template<class T_, class Val_, class Ret_>
class PrExec
{
    typedef Ret_ (T_::*_fun_type)(Val_);
public:
    PrExec(T_* p,_fun_type pf ):m_ptr(p), m_pf(pf){}
    void operator()(Val_ v)    {    (m_ptr->*m_pf)(v);    }
protected:
    _fun_type    m_pf;
    T_*            m_ptr;
};
class XXX
{

std::vector<int>  m_buf;

 void DoCommand(int n)
 {
 }
 void Process()
 {
   for_each( m_buf.begin(), m_buf.end(), PrExec<XXX,int, void>(this, XXX::DoCommand) );
 }
}


теперь собственно вопрос:
есть ли в stl адаптер подобный PrExec или как сделать тоже самое используя уже имеющиеся в stl адаптеры? Я ничего не нашел, а думаю, что что-то должно быть. Использую stlport, поэтому просьба на boost не тыкать.
Если подобный вопрос уже обсуждался — не пинайте, а укажите линк.
С уважением, Петр.
Re: stl::mem_ptr
От: MaximE Великобритания  
Дата: 20.05.04 12:00
Оценка: 1 (1)
User99 wrote:

[]

> есть ли в stl адаптер подобный PrExec или как сделать тоже самое используя уже имеющиеся в stl адаптеры? Я ничего не нашел, а думаю, что что-то должно быть. Использую stlport, поэтому просьба на boost не тыкать.


mem_fun()
mem_fun_ref()

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 alpha
Re: stl::mem_ptr
От: WolfHound  
Дата: 20.05.04 12:07
Оценка: 1 (1)
Здравствуйте, User99, Вы писали:

U> есть ли в stl адаптер подобный PrExec или как сделать тоже самое используя уже имеющиеся в stl адаптеры? Я ничего не нашел, а думаю, что что-то должно быть.

class XXX
{
public:
    std::vector<int>  m_buf;
    void DoCommand(int n)
    {
    }
    void Process()
    {
        std::for_each
            (m_buf.begin()
            ,m_buf.end()
            ,std::bind1st(std::mem_fun1(&XXX::DoCommand), this)
            );
    }
};

Ы?
U>Использую stlport, поэтому просьба на boost не тыкать.
А почему собственно? Я успешно использую их совместно.
Это код вполне себе компилится и работает STLport-5.0-0125 + boost_1_31_0
Использовано boost::lambda::bind
        std::for_each
            (m_buf.begin()
            ,m_buf.end()
            ,lm::bind(&XXX::DoCommand, this, _1)
            );

Использовано boost::bind
        std::for_each
            (m_buf.begin()
            ,m_buf.end()
            ,boost::bind(&XXX::DoCommand, this, _1)
            );

... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: stl::mem_ptr
От: User99  
Дата: 20.05.04 12:18
Оценка:
Здравствуйте, MaximE,
ME>mem_fun()
ME>mem_fun_ref()
Мне нужно вызывать не функцию элементов контейнера! А функцию др класса входным параметром которого является элемент контейнера.
Если я неправильно понял Ваш ответ — поясните и желательно на с++.
Re: stl::mem_ptr
От: User99  
Дата: 20.05.04 12:36
Оценка:
Спасибо ответившим — разобрался.
Re[3]: stl::mem_ptr
От: ArtDenis Россия  
Дата: 21.05.04 03:43
Оценка:
Здравствуйте, User99, Вы писали:

U> Мне нужно вызывать не функцию элементов контейнера! А функцию др класса

U> входным параметром которого является элемент контейнера. Если я
U> неправильно понял Ваш ответ — поясните и желательно на с++.

Тогда используй boost::bind (см. ответ WolfHound'a)
Posted via RSDN NNTP Server 1.9 alpha
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.