Hirdetés
- vrob: Próbálkozás 386 alaplap újraélesztésre
- sziku69: Fűzzük össze a szavakat :)
- Brogyi: CTEK akkumulátor töltő és másolatai
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Klaus Duran: HP wifi nyomtatás+ win11.
- Lalikiraly: Asus Gaming V16 - RTX5050
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- koxx: A bajnokok egere? Lamzu Maya Champions Edition 8K gamer egér
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
dobragab
#4087
üzenetére
Köszi szépen a válaszodat. Először is engedd meg, hogy egy hibát javítsak:
static RET fptr_handler(ARGS... args)
{
tl_function(std::forward<ARGS>(args)...);
}helyesen:
static RET fptr_handler(ARGS... args)
{
return tl_function(std::forward<ARGS>(args)...);
}Egyébként szép megoldás a problémára.
Lényegében hasonló, mint amit a szimulációban írtam. Ott globálisan hoztam létre az objektumokat, ezek tfv.-eit pedig free wrapper fv.-eken keresztül hívtam meg (amik a globális objektumokhoz hozzáférnek), és a free fv.-ekre mutató fv. pointert tudom aztán használni callback fv. pointerként.
Lényegében a te megoldásod is hasonló, csak nem globális, hanem (thread_local) static std::function objecteket hozol létre (tl_function), amik tartalmazzák az objektum címét (ez a lambdában kapturált argumentum), és a megfelelő tfv. pointert. Majd ezt a tl_function std::function objectet meghívó fptr_handler statikus wrapper tfv.-nek a címét (mint közönséges pattintott C fv. pointert) adod vissza. A trükk pedig az, hogy a to_fptr function template második argumentuma egy []{} dummy lambda, aminek a típusa mindíg (fordító által generált) egyedi típus, ezért a to_fptr_t class template minden egyes alkalomkor külön-külön példányosul (a dummy lambda aktuális típusával), minden egyes function object-re külön osztályt, és azzal külön fptr_handler fv.-t létrehozva. Szép megoldás, gratula!
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Új, felbontott Kingston FURY 24GB (1 modul) Renegade DDR5 8000MHz CL38 KF580C38RW-24 - 24 hó gari
- Honor 90 512GB,Újszerű,Dobozaval,12 hónap garanciával
- Motorola Moto G72 128GB,Újszerű,Dobozaval,12 hónap garanciával
- Xiaomi 13T 256GB,Átlagos,Dobozaval,12 hónap garanciával
- Új könyv: A szamuráj erényei Kicune - Itó könyve
- 137 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4080 - 4 ÉV GARANCIA!
- Samsung Galaxy S25 Ultra 256GB Kártyafüggetlen 1év Garanciával
- BESZÁMÍTÁS! Huawei Watch 4 Pro eSIM okosóra garanciával hibátlan működéssel
- ÁRGARANCIA!Épített KomPhone i5 14400F 32/64GB RAM RX 9060 XT 16GB GAMER PC termékbeszámítással
- LG 27UL500P-W - 27" IPS - 3840x2160 4K - 60Hz 5ms - HDR10 - AMD FreeSync - 300 Nits - sRGB 99%
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

