у меня есть Shape
класс в моей программе, который имеет некоторую логику тестирования попадания, чтобы выяснить, нажал ли пользователь внутри фигуры или нет.
Shape.h
class Shape
{
Event<ShapeArgs> balloonBurst;
virtual void onMousePress(); //called when hit test is true on user's click
private:
bool hitTest(int x, int y);
};
Shape.cpp
virtual void onMousePress()
{
cout<<"Clicked inside the shape";
ShapeArgs arg;
arg.name = "XYZ";
NotifyEvent(balloonBurst, arg);
}
Основной класс имеет несколько экземпляров вышеуказанного класса формы
Основная программа: (Main.h)
vector<Shape*> shapes;
void handleShape(ShapeArgs &e);
.CPP
main()
{
for(int i=0;i<10;++i){
Shape *shape = new Shape(Color Color, string URL);
shapes.push_back(shape);
}
}
Теперь я должен слушать balloonBurst
событие Shape
примеры выше. Если бы у меня был один экземпляр, я бы сделал что-то вроде следующего:
AddListener(shape->balloonBurst, this, &MainProgram::handleBalloonBurst); //where shape is a single instance`
Тем не менее, у меня есть несколько экземпляров здесь, и я не уверен, как мне следует подписаться на них и предоставить один и тот же метод-обработчик для всплывающей подсказки (Следует отметить: событие Balloonburst не делает чего-то, что не является специфичным для этого всплывающего окна, поэтому в отличие от C#
sender
не важно для меня в этом случае). handleballoonBurst(ShapeArgs &e)
будет делать что-то отдельное (не относится к воздушному шару, откуда пришло событие)
Как мне прослушать события всех экземпляров формы шара и предоставить один метод-обработчик?
Задача ещё не решена.
Других решений пока нет …