Доброго времени суток.
Сперва кусок кода:
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 не тыкать.
Если подобный вопрос уже обсуждался — не пинайте, а укажите линк.
С уважением, Петр.
User99 wrote:
[]
> есть ли в stl адаптер подобный PrExec или как сделать тоже самое используя уже имеющиеся в stl адаптеры? Я ничего не нашел, а думаю, что что-то должно быть. Использую stlport, поэтому просьба на boost не тыкать.
mem_fun()
mem_fun_ref()
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9 alpha
Здравствуйте, 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 >>
Здравствуйте, MaximE,
ME>mem_fun()
ME>mem_fun_ref()
Мне нужно вызывать не функцию элементов контейнера! А функцию др класса входным параметром которого является элемент контейнера.
Если я неправильно понял Ваш ответ — поясните и желательно на с++.
Здравствуйте, User99, Вы писали:
U> Мне нужно вызывать не функцию элементов контейнера! А функцию др класса
U> входным параметром которого является элемент контейнера. Если я
U> неправильно понял Ваш ответ — поясните и желательно на с++.
Тогда используй boost::bind (см. ответ WolfHound'a)
Posted via RSDN NNTP Server 1.9 alpha