Есть ли какой-то механизм уведомлений/сигналов на С++, подобно 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 просмотр
Решения вопроса 2
@Lol4t0
Если говорить в общем, то вас интересует шаблон проектирования Observer

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

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

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

Войти через центр авторизации
Похожие вопросы