C++ собственный обработчик событий для отдельного экземпляра класса? Доброго времени суток.
Начинаю программировать на С++, понадобилось сделать разные обработчики у разных объектов для события одного типа, что-то вроде "onClick".
Что то вроде этого на "pascale" (в Delphi7):{ Создание объекта }
Button:=TButton.Create(Form1);
{Обработчик событий}
procedure Button1Click;
begin
end;
{ Привязка обработчика }
Button.OnClick:=Button1Click;
Возможно ли такое сделать на С++, чтобы в нутри функции можно было использовать поля объекта?
Сделал пока такclass TButton{
public:
void (*onClick)(void);
};
/* обработчик - простая функция (без доступа к полям объекта) */
void onClick1(void){
// что-то
}
TButton *b = new TButton();
b->onClick = onClick1;
b->onClick();// Вызов

21 Авг 2019 в 07:00
186 +1
1
Ответы
1

Да, возможно сделать собственный обработчик событий для отдельного экземпляра класса в C++. В вашем примере необходимо использовать указатель на метод класса вместо указателя на функцию. Вот как это можно сделать:

#include <iostream>
class TButton {
public:
void (*onClick)(TButton*); // указатель на метод класса
void click() {
if (onClick != nullptr) {
onClick(this); // передача указателя на текущий объект в обработчик
}
}
};
// метод класса для обработки события onClick
void onClickHandler(TButton* button) {
std::cout << "Button clicked!" << std::endl;
}
int main() {
TButton* b = new TButton();
b->onClick = onClickHandler;
b->click(); // вызов обработчика события onClick
delete b;
return 0;
}

В этом примере onClick является указателем на метод класса TButton с аргументом типа TButton*. Метод click() вызывает обработчик события onClick и передает указатель на текущий объект this в качестве аргумента. В функции onClickHandler можно использовать поля и методы объекта, на котором произошло событие.

Таким образом, вы можете создать собственный обработчик событий для отдельного экземпляра класса в C++.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир