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();// Вызов
Да, возможно сделать собственный обработчик событий для отдельного экземпляра класса в 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++.
Да, возможно сделать собственный обработчик событий для отдельного экземпляра класса в 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++.