Re[3]: Двунаправленный список
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 06.07.02 10:37
Оценка:
Здравствуйте Belegel, Вы писали:

B>Мне просто надо вызвать для каждого элемента списка функцию-член класса этого элемента, которую укажет (тем или иным образом) человек, который будет это все использовать.


B>Брр... Прости, если я туплю, эта жара меня добивает %(...

Ты выражаешься на редкость четко и конкретно. Нет, все понятно. Все делается примерно таком образом. Т.к. ты не привел описания типов, я введу свои, и на их примре мы все увидим.

class CListManager;

class CListElem
{
private:
  friend class CListManager;

  CListElem() : i( 0 ) {}

  void DoSomething() { /*modify data members, for example*/ i++; }
private:
// data members
  int i;
};

class CListManager
{
public:
  CListManager() : pFirst( new CListElem() ) {};
  ~CListManager() { delete pFirst; }

  void  IncAll()
  {
    for_each( &CListElem::DoSomething );
  }

private:
  template <class FN>
  void for_each( FN fn )
  {
    for ( 
      CListElem* p = pFirst /*begin()*/; 
      p != NULL/*end()*/; 
      p = GetNext()/*p++*/ )
    {
      (p->*fn)();
    }
  }

  CListElem* GetNext() { return NULL; }

private:
  CListElem* pFirst;
};

int main(int argc, char* argv[])
{
  CListManager mg;

  mg.IncAll();
  return 0;
}
Алексей Кирдин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.