Вот есть, например такая "пирамида": класс А включает в себя объекты класса В, В вкл в себя объекты класса С, С включает в себя объекты класса D. Как грамотно и по-научному послать сообщение от объекта класса D "наверх" к объекту класса А(например, если у D что-то произошло, то он должен тут-же оповестить об этом A)? За время обдумывания проблемы появилась лишь по-моему не очень удачная идея вызвать из D глобальную функцию, которая вызовет соответствующий метод A... Подразумеваю, что можно помудрить с сообщениями, но каких-то конкретных мыслей нет
Буду признателен, если подкините идеи, как это осуществить! Заранее благодарю!
Ну например сделать все классы наследниками одного класса с методом SendMessage и свойством Parent. При необходимости сигналим Parent-у, в Parent-е проверяем есть ли более верхний Parent и сигналим дальше. Вот и всё
Здравствуйте, DoK_ToP, Вы писали:
DK_>Вот есть, например такая "пирамида": класс А включает в себя объекты класса В, В вкл в себя объекты класса С, С включает в себя объекты класса D. Как грамотно и по-научному послать сообщение от объекта класса D "наверх" к объекту класса А(например, если у D что-то произошло, то он должен тут-же оповестить об этом A)? За время обдумывания проблемы появилась лишь по-моему не очень удачная идея вызвать из D глобальную функцию, которая вызовет соответствующий метод A... Подразумеваю, что можно помудрить с сообщениями, но каких-то конкретных мыслей нет DK_>Буду признателен, если подкините идеи, как это осуществить! Заранее благодарю!
Для этого удобно использовать boost::signal. С помощью этого механизма класс D может определять внутри себя событие. На это событие могут вешать свои обработчики все классы, "знающие" об объектах класса A. В определенный момент объект класса A просто вызывает данное событие, не интересуясь тем, сколько и какие обработчики на это событие подписаны.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, DoK_ToP, Вы писали:
DK_>>Вот есть, например такая "пирамида": класс А включает в себя объекты класса В, В вкл в себя объекты класса С, С включает в себя объекты класса D. Как грамотно и по-научному послать сообщение от объекта класса D "наверх" к объекту класса А(например, если у D что-то произошло, то он должен тут-же оповестить об этом A)? За время обдумывания проблемы появилась лишь по-моему не очень удачная идея вызвать из D глобальную функцию, которая вызовет соответствующий метод A... Подразумеваю, что можно помудрить с сообщениями, но каких-то конкретных мыслей нет DK_>>Буду признателен, если подкините идеи, как это осуществить! Заранее благодарю!
R>Для этого удобно использовать boost::signal. С помощью этого механизма класс D может определять внутри себя событие. На это событие могут вешать свои обработчики все классы, "знающие" об объектах класса D. В определенный момент объект класса D просто вызывает данное событие, не интересуясь тем, сколько и какие обработчики на это событие подписаны.
В предыдущем тексте опечатки — исправления выделены жирным.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, DoK_ToP, Вы писали:
DK_>Вот есть, например такая "пирамида": класс А включает в себя объекты класса В, В вкл в себя объекты класса С, С включает в себя объекты класса D. Как грамотно и по-научному послать сообщение от объекта класса D "наверх" к объекту класса А(например, если у D что-то произошло, то он должен тут-же оповестить об этом A)? За время обдумывания проблемы появилась лишь по-моему не очень удачная идея вызвать из D глобальную функцию, которая вызовет соответствующий метод A... Подразумеваю, что можно помудрить с сообщениями, но каких-то конкретных мыслей нет DK_>Буду признателен, если подкините идеи, как это осуществить! Заранее благодарю!
Ochen udobno sdelat nasledovanie, i v nasledovannom classe derjat private pointer bazogogo classa.