Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по boost::signal, чето запутался... 
:(
    Опции темы
Alek86
Дата 21.12.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Если у меня есть 2 класса:

Код

class ParentClass {
public:
  // types
  class ChildClass {
    public:
      void Cry();
  };
  // funcs
  void CryResponding();
private:
  ChildClass m_child;
};

ParentClass parent;


допустим, каким-то образом без ведома родителя у переменной m_child у переменной parent вызвался метод Cry. Как с помощью boost::signal организовать сигналы так, чтобы в ответ у родителя вызвался CryResponding()?

То, что я вычитал в бустовском мануале мне не очень нравится. Если я правильно понял, нужно передать m_child указатель на его "родителя"... Зачем тогда вообще сигналы, если я могу запросто вызвать CryResponding() через указатель?

уж звыняйте за глупый вопрос, просто я запутался, а прикрутить эту вещь желательно сегодня smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
bel_nikita
Дата 21.12.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Вот, хороший пример использования  boost::signal


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 21.12.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Код

class ParentClass {
public:
  // types
  class ChildClass {
    public:
      void Cry();
      boost::signal< void() > signal;
  };
  // funcs
  void CryResponding();

  ParentClass()
  { m_child.signal.connect(boost::bind(&ParentClass::CryResp, this)); }
private:
  ChildClass m_child;
};

Идея ясна?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alek86
Дата 21.12.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



блин, я проглючил :(
не так его (пример этот) понял. из-за того эта тема и появилась...

и вопрос не в тему, но все же...
там написано

Код

class View
{
public:
    View(Document& m)
        : m_document(m)
    {
        m_connection = m_document.connect(boost::bind(&View::refresh, this, _1));
    }

    virtual ~View()
    {
        m_document.disconnect(m_connection);
    }

    virtual void refresh(bool bExtended) const = 0;

protected:
    Document&               m_document;

private:
    Document::connection_t  m_connection;
};


что случится, если я сделаю

Document doc;
View view1(doc);

View view2(view1); // ???

View view3(doc);
view3 = view1;       // ???

это что, ошибка при создании класса (из-за того, что писали его не как реальный)?
просто такое "упущение" я встречаю не первый раз в умных источниках

или тут вообще никакого упущения нет?

Добавлено через 35 секунд
archimed7592, так точно smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.