Delegaty z GUI
grudzień 1, 2007 — morituriusTak jak mi poradził Xion poszukałem troszkę o delegatach. Wcześniej nie chciało mi się tego uczyć bo uznawałem to za czarną magię, ale jak się okazało - nie taki diabeł straszny…
Zacząłem od zrozumienia jak to w ogóle działa. Później poszukałem informacji w jaki sposób można to zakodzić w C++. Napisałem sobie najpierw prosty program realizujący coś takiego, a potem malutką klasę która mi opakowuje to wszystko (raptem 1 metoda i operator() ). Udało mi się to wszystko nakłonić do działania.
Teraz przyszło najtrudniejsze - wcisnąć to do AGE.
Tutaj już trochę bardziej musiałem się wysilić i koncepcji było kilka. Oczywiście najprostsza, najbardziej oczywista i najwygodniejsza metoda przyszła mi do głowy na sam koniec. Ostatecznie jedyne co trzeba zrobić to napisać linijkę:
CONNECT( button, CM_CLICKED, task, gameTask::buttonClicked );
Jest to makro, które powstało - jak to makra mają w zwyczaju - dla wygody
Oczywiście warto też napisać metodę buttonClicked() ^^
Dodatkową zaletą wykorzystania delegatów jest to, że dla zdarzeń dla, których nie określę żadnej metody nie są wywoływane żadne funkcje. W poprzedniej metodzie - a’la procedura okna - funkcja była wywoływana nawet dla nieobsługiwanych zdarzeń, a to zawsze jakaś strata czasu. Szczególnie dla zdarzenia typu CM_MOVE ^^
Tak więc chciałem podziękować Xionowi za jego konstruktywną krytykę mojego rozwiązania i podsunięcie czegoś bardziej cywilizowanego ![]()