Sun
15
Oct 2006
Istnieje coś takiego, jak wskaźnik na metodę (inaczej delegat - delegate, zdarzenie - event, sygnał - signal czy jak kto tam nazwie). Chodzi o wskaźnik na dowolną metodę konkretnego obiektu dowolnej klasy, która ma zgodny nagłówek. Mechanizm ten przydatny jest szczególnie podczas pisania systemu GUI. Posiada go każdy nowoczesny język programowania, jak Delphi czy C#. Każdy z wyjątkiem C++. Jak sobie z tym poradzić?
Różni ludzie różnie kombinują. Pojawia się tutaj wiele zagadnień, np. pytanie czy można zapewnić wygodną składnię bez użycia makr albo elastyczność bez użycia rzutowania typów. Jedni w ogóle omiają problem robiąc to prymitywnie, np. łańcuszkiem if-else albo wielkim switchem. Inni wymyślają własne implementacje, a jeszcze inni korzystają z gotowych. Tych gotowych jest wiele i są bardzo różnorodne. Niektóre z nich to mechanizm wbudowany w bibliotekę Qt czy wxWidgets, a z niezależnych modułów - sigslot.
Ja jakiś czas temu wypatrzyłem bibliotekę FastDelegate dołączoną do artykułu na The Code Project i właśnie ją polecam. Jest szybka, elastyczna, przenośna, wygodna i ogólnie elegancka. Napisałem do niej krótką dokumentację, żeby można było zacząć jej używać bez czytania całego artykułu.