TNotifyList ?

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем -, 13 апр 2005.

Статус темы:
Закрыта.
  1. Гость

    Здравствуйте,
    есть такая проблема.

    Надо завязать между собой несколько компонентов: один является источником события (надо сигнализировать о некоторого рода изменениях в состоянии компонента), другие должны его отлавливать и обрабатывать.
    Как я понял, TNotifyEvent сюда не подойдет, так как он уместен только в случае наличия одного "заинтересованного" компонента.

    Нашел в хелпе упоминание о TNotifyList, но оно всего лишь упомнинание, реальной помощи от него нет.

    Заранее спасибо.
     
  2. Sensei

    Sensei Гость

    поставь задачу конкретней, просто может оказаться , что не надо так сложно делать, как ты хочешь.
     
  3. jo1nt

    jo1nt Гость

    Если я правильно понял вопрос, тебе надо событие рассылать многим подписчикам.

    Насколько я помню, в CBuilder для объявления указателя на метод класса используется слово closure(или __closure), но я точного синтаксиса не помню, поэтому в примере напишу на "чистом" С++.
    Примерная реализация


    Код (Text):
    class YourClass
    {

    public:
    typedef void (TObject::*PointerToFunc)(YourClass* Sender);
    std::list<PointerToFunc> pointers;
    void BroadcastEvents(void)
    {
    typedef std::list<PointerToFunc>::iterator pfIter;
    for (pfIter it =pointers.begin(); it!=pointers.end;++it)
    *it(this);
    }
    }
    соответсвенно, подписаться можно через
    pointers.push_back, pointers.push_front.
    Тут для простоты pointers объявлены "public", можно написать класс, который бы предоставлял удобный интерфейс для добавления/удаления подписчиков, напр. переопределением "+=" и "-=", в качестве контейнера использовать vector и т.п.
     
Статус темы:
Закрыта.

Поделиться этой страницей