1366
Vývoj / Re:C++ Bindovanie funkcií, std::funnction a pointery na funkciu
« kdy: 26. 09. 2020, 23:41:30 »RegisterClass má parametr pro alokaci paměti navíc nad rámec windowsí struktury. Tam se dají předat uživatelská data. Spíše než přímo std::function bych tam dal ukazatel na funktor, ať se snáze spravuje paměť. Takový funktor pak může obsahovat std::function nebo mít kód přímo v přetíženém operátoru ().Ano, target ti vrátí nullptr. Ze std::function se function-pointery nevyrábějí. Pokud ho potřebuješ, tak použij klasickou funkci.
Ahoj a nevedel by si mi prosím poradiť ako na miesto kde sa očakáva typ:Kód: [Vybrat]typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
vložiť (bindnúť alebo také niečo) ešte jeden parameter? Potrebujem tam dostať inštanciu triedy ktorá WNDPROC obaluje. Keďže sa tam vyžaduje Cčkový pointer na funkciu nemôžem tam použiť std::bind (resp ani boost::bind)
Momentálne to riešim cez static. Zatiaľ mi to stačí, ale chcel by som mať možnosť vytvoriť viac inštancíi a každú predať ako parameter do WNDPROC (WNDPROC musí byť static).
Žiaľ toto je asi prvý vážnejší zákys v C++ na, ktorý nie a nie nájsť riešenie. A možno je to riešenie aj veľmi jednoduché, len mi chýba nejaká podstatná znalosť. Preto sa to snažím vyriešiť štandartným spôsobom. Viem, že by sa dala vytvoriť std::map a v nej indexovať jednotlivé inštancie podľa HWND, ale ja sa chcem naučiť ako sa to robí normálnym spôsobom, nie cez nejaké obskurné hacky.
Je to něco jako “this”, ale na úrovni typů. Jdou skrz to implementovat higher-kinded typy v systému prvního řádu (bez explicitních HKT), takže ve výsledku je takový systém formálně silnější (a kompatibilní s dědičností).