C++, функции-члены, указатели на функции

103
06 декабря 2019, 19:50

Всем доброго времени суток. Возможно глупый вопрос, но:

Есть класс Manager. Внутри этого класса есть код, который может сгенерировать событие. Есть другой класс M_User(а может их будет и несколько), которые создают у себя экземпляры класса Manager и хотят указать ему свою функцию-член как обработчик некоторого события.

Учитывая, что указатель на функцию-член будет M_User1::* \ M_User2::*, возможно ли это вовсе? Без наследования.

Answer 1

Вполне можно обойтись std::function.

/// Тип обработчика
using handler_t = std::function<void()>;
class Manager
{
public:
    /// Установка обработчика
    void SetHandler(handler_t handler)
    {
        ///.... some actions
    }
};
class User
{
public:
    /// Установка обработчика
    void Bind()
    {
        handler_t handler = std::bind(&User::_HandlerFunction, this);
        _manager->SetHandler(std::move(handler));
    }
private:
    /// Сам обработчик
    void _HandlerFunction()
    {
        ///.... some action
    }
    Manager* _manager;  
};

Но, раз уж вы заикнулись о событиях, следует посмотреть в сторону boost::signals2::signal

READ ALSO
Многократное использование секции с if

Многократное использование секции с if

В ходе теста, после больших блоков проверяю, не была ли нажата кнопка СТОПЕсть такая секция с if

138
FFMPEG медленно записывает в файл

FFMPEG медленно записывает в файл

С помощью хороших людей вроде разобрался с тем как пользоваться ffmpeg для encodeВозникла следующая проблема, при записи в файл данных с микрофона...

104
WinSock2 - функция accept()

WinSock2 - функция accept()

Функция разрешения входящего соединения через сокет формирует дескриптор нового сокета, возвращая значение типа SOCKET

127
Как изменить размер JButton в Java

Как изменить размер JButton в Java

что делать? Я попробовал все методы/ или же большую часть

121