Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > вопрос по boost::signal


Автор: Alek86 21.12.2007, 13:45
Если у меня есть 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

Автор: bel_nikita 21.12.2007, 17:20
Вот, хороший пример использования  http://www.boost.org/doc/html/signals/tutorial.html#id1628358

Автор: archimed7592 21.12.2007, 17:30
Код

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;
};

Идея ясна?

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

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

Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)