Задать вопрос

Есть ли какой-то механизм уведомлений/сигналов на С++, подобно Qt?

Доброго времени суток!

Достаточно долгое время пишу на Qt, который предоставляет очень удобный механизм сигналов-слотов. Скажите, можно ли хотя бы что-то отдаленно напоминающее написать на чистом С++? Без Win API.

Допустим, есть DLL, которая предоставляет singleton класс. Необходимо, чтобы после вызова на экземпляре данного класса определенной функции отсылался некий "сигнал", у которого определены типы передаваемых значений.

На Qt это бы выглядело так:
class Singleton : public QObject
{
    Q_OBJECT
public:
    void function(const QString& arg)
    { emit broadcast(arg); }
signals:
    void broadcast(const QString& arg);
}


При вызове функции function, отправится сигнал broadcast, к которому, в свою очередь, смогут подключиться все, кто владеет экземпляром данного класса. Подобие этого механизма можно реализовать на C++? На крайний случай можно с использованием WinAPI.
  • Вопрос задан
  • 2821 просмотр
Подписаться 6 Оценить Комментировать
Решения вопроса 2
@Lol4t0
Если говорить в общем, то вас интересует шаблон проектирования Observer

Реализаций его может быть придумано большое количество

* На WinAPI с использованием системы сообщений
* На С с использованием указателей на функции
* На С++ с использованием std::function или любого другого объекта, интерфейс которого известен
* На С++ с использованием boost::signals
* Qt signals/slots
* и т.д.
Ответ написан
Да можно, WinAPI тут не нужен, просто реализуйте класс который будет хранить набор std::function или boost::function объектов (ну или реализуйте свой специальный функтор, если хотите). Делаете у этого класса набор методов для регистрации/разрегистрации callback-а и посылки сигнала (функция, которая пройдет по всем callback-ам и вызовет их). Потом просто добавляете объект этого класса везде где нужно создать сигнал.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы