Evo i zašto.
Koristim FLTK :)
Mislim da je on dobrim delom zaslužan za ovo - ako hoćeš callback za (recimo) klik - moraš da mu daš pointer ka funkciji koja će da handle-uje događaj. Znači, ta funkcija mora da bude obična, ne može da bude članica neke klase (ja barem tako mislim - nek me ispravi neko ako grešim).
Da stvar bude još gora, callback često može da se postavi za samo jedan event (recimo samo On_Click), pa često moraš da subclass-uješ klasu da bi dodao svoj handle za željeni event (ovo me najviše nervira).
Zato sam praktično prinuđen da sve trpam u obične funkcije, pa kad program naraste (a naras'o je) - kuku mene - pola sata tražim šta je gde, koja funkcija koju poziva... tužno... kao da programiram u C-u...
I onda kad se setim dana kada sam programirao u Delphi-ju, dođe mi da plaćem... kad se setim kako tamo svaka kontrola ima svoje Event-e, pa tu lepo smestiš program, pa je sve lepo organizovano...
E sad se ja pitam... ima li šanse da takvu organizaciju imam u C++ ?
Da li je rešenje u nekoj drugoj GUI biblioteci ?
Da li postoji GUI biblioteka koja je organizovana tako što svaka kontrola ima prazne virtual-ne funkcije za svaki Event, pa ti onda lepo napraviš subklasu i 'preuzmeš' virtualne funkcije koje ti trebaju ?
Znači, klasa ima:
class button
{
virtual int On_Click ()
{
// prazno, nista ne radi
return 0;
}
};
I onda ti preuzmeš taj event, tako što subklasuješ klasu :
class button1 : public button
{
int On_Click ()
{
// ovde ide tvoj program
return 1;
}
};
... i posle kreiraš objekat od te izvedene klase.
Ovako sors izgleda mnogo organizovanije, baš kao u Delph-iju.
Jasno je da FLTK ne može ovo.
Jedino rešenje za FLTK je da ja sam napravim podklasu za svaku komponentu (Widget), i da izmenim handle() funkciju tako da ona poziva prazne virtual-ne funkcije (koje postoje u toj podklasi), pa onda u mom programu da napravim podklasu te podklase, i tu da napravim svoje virtuelne funkcije, u koje mogu da ubacim program za Evente.
Ovo je popriličan smor, pošto koristim desetak komponenti, pa sve njih trebam da subklasujem.
I postoji drugo rešenje, lakše, ali nije kompletno.
Rešenje je da napravim namespace za svaki objekat (kontrolu) na formi, i tu da trpam funkcije za handle-ovanje, i globalne promenljive.
Tako sors izgleda pregledniji, svaki objekat ima svoj 'kutak', koji ima svoje ime, tako da je sve raspoređeno...
Mana je što ne mogu da handle-ujem svaki Event, pa ću negde morati da sublasujem neki Widget, da bi dodao callback za željeni event.
Elem, interesuju me vaša iskustva i rešenja u organizaciji sorsa.
Postoji li neka portabilna GUI biblioteka koja ima onakve prazne virtual-ne funkcije, namenjene baš Event-ima ?