Ahojte,
riešim jeden projekt v C a potreboval by som v ňom zaregistrovať svoju funkciu ako callback. Problém je, že potrebujem tých registrácií viacej a potrebujem ich rozlíšiť. Keďže callback prijíma len void funkciu (je to externá knižnica, keby bol môj kód tak si tam ten parameter pridám), ja by som potreboval za behu vytvoriť "funkcionálny objekt" s nabindovaným parametrom.
Keby to bol projekt v C++ použil by som std::bind. Existuje niečo podobné, ako std::bind v C?
Myslis funkciu bind() pre sietarske veci?
Ak nie, tak daj pseudokod, ako by malo robit, kedze c++ sa az tak nevvyznam a neprislo mi tam jednoznacne na pochopenie.
Funkcia bind slúži na bindovanie parametrov funkcie, takže vráti funkciu bez parametrov.
Čo znamená slovo bindovat? Aby sme pod tým pojmom mysleli to isté.
Jednoducho aby to robilo to isté, čo std::bind zo stdc++ knižnice.
nechapem, ze sa s nim bavis, ked chlapec tomu vobec, ale ze vobec nerozumie. a ani nie ze nerozumie, ale on ani nechape, o co tu ide...
Nie.
1. riesenie: Nech autor knihovny zmeni na:
A cez data vies dat hocijake data (i pointery na funkcie). Alebo podla cisla rozhodovat kt. funkciu zavola.
2. riesenie Klasicky C-kovsky:
1. nie, špecifikáciu glutDisplayFunc vážne nedokážem zmeniť.
2. nie, pretože okná sú vytvárané dynamicky, nie staticky.
2) pozor, v C static znamena nieco ine, ako v C++ !!! Si si toho vedomy. To nevadi, ze sa hodnota display_001 bude x krat v programe menit.
1) Ak to nemozes zmenit, tak zmen kniznicu. Trebars na renderovanie pouzi SDL.
Oprava: Alebo podla cisla rozhodovat kt. funkciu zavola tvoja hlavna managerska callback funkcia. Kedze vsetko sa da zamenit na void * (tj. adresu), takze moze tam byt aj cislo alebo hocico.
Je to strašná prasárna, ale: udělat novou funkci, která bude mít lokální proměnnou (ten parametr) a bude s ní volat tu tvoji funkci. Pak tu novou funkci zkopírovat na jiné místo v paměti a hodnotu té proměnné tam přepsat.
Možná existuje nějaká knihovna, která už tohle dělá… případně použít nějakou knihovnu pro dynamické generování/kompilování kódu za běhu.
Jinak samozřejmě čisté řešení je, aby se upravila ta knihovna, která přijímá callback, aby vedle něj brala i ukazatel, kterým lze předat libovolný parametr.
Ale nejsem expert na C, tak možná existuje nějaké jednodušší řešení…
Ok, tak inak. V renderovacej funikcii viem získať ID aktuálneho okna, takže namiesto parametra funkcie si vytvorím zoznam okien, v ňom vyhľadám parameter, ktorý som chcel poslať funkcii a nejak to +/- funguje ak je to správne omutexované. Povedzme, že je to uzavreté.