Событийная модель C++

114
24 марта 2021, 20:20

Существуют ли какие либо подходы для создания событийной модели в C++ по аналогии с событиями из C#? Знаю что данный вопрос уже не раз поднимался, кто то свои делегаты пишет а на основе их уже события строит, кто как выходит из положения, но хотелось бы узнать как правильнее и лучше всего решать данный вопрос, что бы в будущем код работал стабильно и не пришлось переписывать.

Мне нужно создать проект на C++ (очень мало с ним работал) и я хотел бы его сделать на событиях (по логики задачи лучше всего подходит). От сюда и вопросы: 1. Как в C++ принято создавать события (подписка / отписка и прочие) 2. Возможно существует какие либо библиотеки где события уже реализованы? 3. Если событийная модель не подходит то какие аналоги используют чаще всего ?

Я изначально думал сделать события на основе std::function - однако столкнулся с тем что нельзя однозначно определить какой именно объект / функция - были подписаны. Буду благодарен за советы и помощь.

Answer 1

В качестве одного из вариантов, можно через наследование. Делаешь интерфейс (например полностью абстрактный класс) , класс, который подписуется, наследуется от него, класс на который подписываются хранит коллекци указателей на этот интерфейс. Подписаться/отписаться - добавить/удалить указатель из коллекции. Событие - для всех элементов из коллекции вызвать определённый метод. Только нужно быть осторожным, чтобы не разрушить подписчика не отписавшись и с операторами копирования/присваивания/перемещения.

READ ALSO
Открытие виртуального COM порта

Открытие виртуального COM порта

Есть устройство, которое может записывать в заданный COM портНужно считать данные с этого COM порта

125
Динамическое выделение с помощью malloc

Динамическое выделение с помощью malloc

Почему на функции free программа падает?

95
IDXGISurface2::GetResource Что передается, или отдается вторым параметром?

IDXGISurface2::GetResource Что передается, или отдается вторым параметром?

Я уже посмотрел заголовочный файл, и сайт с документацией, но так и не понял что передавать вторым параметром в метод GetResource?

69
Вопрос по строковым литералам

Вопрос по строковым литералам

Почему вот это приводит к ошибке времени исполнения:

134