Здравствуйте, Кывт, Вы писали:
К>1. В такой реализации, которую ты привел, она вообще бесполезна, так как обработчик события — один на весь класс и не имеет доступа к экземпляру класса. Если расширить ее до того, чтобы она поддерживала экземпляры классов, то идея должна как-то измениться. Как ты собираешься передавать экземпляры? Мне ведь нужно подписать конкретный обработчик на событие конкретной кнопки, а не всех кнопок в программе.
К>Приведи пример, как с помощью твоей идеи (уже в расширенном виде) я могу решить следующую задачу:
К>К>class Button : public Widget
К>{
К>public:
К> Event<ClickedEvent> Clicked;
К>};
К>class MyForm : public Form
К>{
К>public:
К> MyForm()
К> {
К> button1.Clicked += ClickedEventHandler(*this, &MyForm::OnButton1Clicked);
К> button2.Clicked += ClickedEventHandler(*this, &MyForm::OnButton2Clicked);
К> }
К>private:
К> Button button1;
К> Button button2;
К>private:
К> void OnButton1Clicked(Point location)
К> {
К> // Has to be called when button1 is clicked.
К> }
К> void OnButton2Clicked(Point location)
К> {
К> // Has to be called when button2 is clicked.
К> }
К>};
К>
Вот
переделанная реализация. Задача решена как-никак.
Над остальными пунктами пока думаю. Спасибо за подробный ответ.