abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    8.11. 00:33 | Nová verze

    Byla vydána OpenIndiana 2026.10. Unixový operační systém OpenIndiana (Wikipedie) vychází z OpenSolarisu (Wikipedie).

    Ladislav Hagara | Komentářů: 21
    8.11. 00:22 | IT novinky

    Americký výrobce polovodičů onsemi (ON Semiconductor) zrušil plány na rozšíření výroby v rožnovském závodě v Česku za dvě miliardy dolarů (podle aktuálního kurzu zhruba 43,5 mld. Kč). Důvodem je vývoj na trhu.

    Ladislav Hagara | Komentářů: 38
    7.11. 13:00 | Bezpečnostní upozornění
    Nové vydání zlib opravuje několik problémů při kompresi a dekompresi dat, přetečení bufferů, čtení mimo vyhrazenou paměť, únik neinicializovaných dat. Zvlášť významné jsou chyby v inflateGetDictionary(), inflateSync() a gzwrite(), které mohou způsobit poškození paměti. Vysoká relevance - zlib používá řada systémových i aplikačních komponent.
    vencour | Komentářů: 6
    7.11. 12:25 | Bezpečnostní upozornění
    Digicert hlásí neoprávněné čtení archivních zákaznických údajů. Došlo k němu po migraci z února 2025, po níž se interní systém, dříve dostupný jen přes VPN, stal přístupným z internetu. Chyba v oprávněních umožnila nově vytvořeným účtům číst archivní záznamy. K přístupu k datům mělo dojít mezi 27. červnem a 2. červencem 2026. DigiCert neoprávněné čtení potvrdil až 19. října 2026. Problém zpočátku vyhodnotil jako tvorbu účtů, ne jako … více »
    vencour | Komentářů: 5
    7.11. 04:44 | Pozvánky

    O víkendu probíhá na FIT VUT v Brně konference OpenAlt 2026 o otevřeném softwaru a datech, IT bezpečnosti, DIY a IoT. Na programu je spousta zajímavých přednášek. Pokud jste v Brně, stavte se. Vstup zdarma. Přednášky lze sledovat i online na VHSky a YouTube.

    Ladislav Hagara | Komentářů: 4
    7.11. 02:11 | IT novinky

    Qualcomm uzavřel víceletou dohodu se SpaceX. Bude dodávat rádiové technologie, baseband jednotky a software pro plánovanou pozemní 5G síť Starlink Mobile. Výstavba má zahrnovat desítky tisíc základnových stanic v USA. Zahájení nasazování se očekává v roce 2027. Qualcomm dohodu označuje za svůj dosud největší 5G kontrakt.

    vencour | Komentářů: 3
    7.11. 02:00 | IT novinky

    Google rozšířil Cloud Vulnerability Reward Program. Nově nabízí odměnu až 250 tisíc dolarů za vysoce závažné architektonické bezpečnostní chyby označované jako Root-in-Cloud.

    vencour | Komentářů: 3
    6.11. 12:22 | IT novinky

    V březnu byla oznámena spolupráce GrapheneOS s Motorolou. Nejnovější vlajka Motorola Signature 27 je první Motorola s oficiální podporou GrapheneOS. GrapheneOS (Wikpedie) je varianta Androidu zaměřující se na bezpečnost a soukromí.

    Ladislav Hagara | Komentářů: 9
    6.11. 04:55 | Nová verze

    Omarchy (Wikipedie) je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové verzi 4.5.0. Nově také pro Apple Silicon, konkrétně pro M1/M2/M3/Neo MacBooky.

    Ladislav Hagara | Komentářů: 4
    6.11. 03:22 | Nová verze

    Byla vydána nová stabilní verze 8.3 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 156 s bezpečnostními opravami z Chromia 157. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (8%)
     (7%)
     (4%)
     (21%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 3054 hlasů
     Komentářů: 36, poslední 11.11. 22:38
    Rozcestník

    Dotaz: c++0x, std::function

    Jardík avatar 15.2.2010 19:41 Jardík | skóre: 40 | blog: jarda_bloguje
    c++0x, std::function
    Přečteno: 723×
    Stala se mi taková věc. Něco jsem programoval a použil jsem tam callbacky ve stylu
    std::function<void (EraseResult)> OnEraseDone;
    
    std::thread eraseDisc(bool quick, OnEraseDone callback)
    {
      std::thread th(std::bind(&Device::_eraseThread, this, callback));
      return std::move(th);
    }
    
    void _eraseThread(OnEraseDone callback)
    {
      // blabla
    }
    
    Callbacky mi tak hezky fungovaly, ale jen do té doby, než jsem místo obyčejné funkce jako callback chtěl použít pointer na metodu:
    // v metodě objektu typu Test
    std::thread th = eraseDisc(true, OnEraseDone(&Test::eraseDone, this));
    
    Kompilátor nahlásí slušnou 100 řádkovou chybu, ze které se zdá, že takový konstruktor std::function nemá a std::bind mi taky nepomůže. Otázkou tedy je, co použít místo std::function (GCC 4.4 ještě neumí lambda funkce, tak ty taky ne, boost knihovnu taky nee), nebo poradit, co dělám špatně.
    Věřím v jednoho Boha.

    Řešení dotazu:


    Odpovědi

    15.2.2010 20:51 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: c++0x, std::function
    Use the std::mem_fn, Jardiku!
    Jardík avatar 15.2.2010 21:29 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: c++0x, std::function
    Takováto odpověď mi nestačí. mem_fn jenom obsáhne ten pointer na metodu, ale né objekt, na který se to má volat a je třeba ho poté uvést, což není to, co potřebuju.
    Věřím v jednoho Boha.
    15.2.2010 21:40 Jirka P
    Rozbalit Rozbalit vše Re: c++0x, std::function
    To, co potřebuješ, je bind (nějak takhle):
    eraseDisc(true, boost::bind(&Objekt::metoda, this));
    
    Skoro jistě (nechce se mi to zjišťovat) je to v C++0x taky (asi se to bude jmenovat std::bind), najdi si to.

    Nebo můžeš bejt frikulín, a jít do lambdy (bez záruky jak na syntax, tak na funkčnost v nějakým kompilátoru):
    eraseDisc(true, []{ this->metoda(); } );
    
    Na std::function je konvertovatelný buď func-pointer, nebo funktor.
    Jardík avatar 15.2.2010 22:23 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: c++0x, std::function
    V dotazu jsem snad psal, že GCC lambdy zatím nemá (je sice SVN branch, který je má, ale extra kompilovat gcc se mi moc nechce).
    Věřím v jednoho Boha.
    15.2.2010 21:44 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: c++0x, std::function

    Tahleta dnesni mladez ...

    std::bind(std::mem_fn(&Test::eraseDone), this)
    Jardík avatar 15.2.2010 22:30 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: c++0x, std::function
    Tak na tohle mem_fn() nepotřebuju, to zvládne bind() i bez toho. Problém však je, že výsledek nemůžu přiřadit do std::function<void (EraseResult)>
    Věřím v jednoho Boha.
    15.2.2010 22:46 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: c++0x, std::function

    Jo aha, vy tam mate jeste jeden volnej parametr... s vama je teda prace!

    #include <functional>
    #include <string>
    #include <iostream>
    
    
    struct test
    {
            void run(const std::string& message)
            {
                    std::cout << message << "\n";
            }
    };
    
    int main(int argc, char** argv)
    {
            using namespace std::placeholders;
    
            test t;
            std::function<void (const std::string&)> f = std::bind(&test::run, &t, _1);
    
            f("Hola hola");
    }

    (Mate recht, jde to i bez std::mem_fn, musim se podivat, proc mne to bez nej kdysi neslo...)

    15.2.2010 22:46 Jirka P
    Rozbalit Rozbalit vše Re: c++0x, std::function
    Jestli to má mít ještě parametry, tak:

    std::bind(&Test::eraseDone, this, std::placeholders::_1)
    Jardík avatar 15.2.2010 22:57 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: c++0x, std::function
    To je ono :-) Děkuju.
    Věřím v jednoho Boha.
    16.2.2010 10:57 Ivan
    Rozbalit Rozbalit vše OT: was Re: c++0x, std::function
    Koukam ze uz jsi to vyresil. Stejne si ale neodpustim jednu OT poznamku, kterou si jeste pamatuju jeste ze skoly. Nas prednasejici se jednou rozpovidal na tema jakej straslivej opruz byl implementovat member pointery v jeho kompilatoru. Kompilator musi pripravit kod, kterej za behu rozhodne jestli je metoda virtualni nebo ne, jestli nahodou neni zdedena od virtualniho predka a pod. Te to prej desna magie a v zavislosti na implementaci zabira member pointer 6-12B na 32bit platformach. Je to jedna z nejtezsich veci pro impementatory C++ kompilatoru. Ja jsem si z toho vzal ponauceni ze nikdy member pointer pouzivat nebudu, ze mi staci trida command s metorou run.
    16.2.2010 13:28 Jirka P
    Rozbalit Rozbalit vše Re: OT: was Re: c++0x, std::function
    Upřímně řečeno, z takovéhle logiky se mi otvírá kudla v kapse. Když to převyprávím, tak prostě nějaký přednášející něco implementoval, nešlo mu to, tak to prohlásil za opruz, a učí to studenty nepoužívat.

    K jednotlivým bodům:
    Kompilator musi pripravit kod, kterej za behu rozhodne jestli je metoda virtualni nebo ne, jestli nahodou neni zdedena od virtualniho predka a pod.
    Nikoliv, kompilátor nic takového dělat nemusí. Ani nemůže, protože za běhu v programu taková informace prostě není (ledaže by si ji tam ten implementátor speciálně kvůli tomuhle přidal, ale v takovém případě je pochybné mluvit o tom jako o opruzu - implementátor si za ten opruz může sám, a to i v případě, kdy chce dodržet nějaké ABI). Pokud jde o ukazatele na metodu, je situace celkem jednoduchá - asi nejjednodušší implementace je dvojice (pointer na funkci, offset pro this) s tím, že pro volání virtuální funkce ap. kompilátor vygeneruje kód
    Ret synthesized_thunk(T* that, Args... args) {
      that->real_function(args);
    }
    
    a tuhle funkci použije do toho PMF.
    zabira member pointer 6-12B na 32bit platformach
    To není vůbec k divení, takových věcí je víc.
    Je to jedna z nejtezsich veci pro impementatory C++ kompilatoru
    Implementoval ten váš expert RTTI? Výjimky? Linker? To jsou všechno věci těžší, anebo pracnější, a zcela určitě jejich datové struktury zabírají víc, než pouhých 12 B.
    Ja jsem si z toho vzal ponauceni ze nikdy member pointer pouzivat nebudu
    Uniká mi logika tohohle kroku. I když to nebudete používat, implementovat se to bude pořád stejně (těžce nebo lehce, to je jedno).
    ze mi staci trida command s metorou run.
    ... čímž se ochudíte o jakýkoli generický kód, který spolupracuje s funktory.

    Disclaimer: Tento příspěvek rozhodně nemá vyvolat dojem, že PMF by se měly používat nějak masově. IMHO jsou PMF v C++ jedním z reliktů C (v tomto případě ukazatelů na funkce) a jejich použití přináší např. výkonnostní problémy, na druhou stranu není jednoduché a nepodporuje znovupoužitelnost kódu.
    16.2.2010 13:54 dark
    Rozbalit Rozbalit vše Re: OT: was Re: c++0x, std::function
    A co toto, celkem jednoduché a fungovalo mi to zatím všude:)

    Member Function Pointers and the Fastest Possible C++ Delegates
    Jardík avatar 17.2.2010 22:34 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: OT: was Re: c++0x, std::function
    O tom já přece vím, ale já chtěl c++0x řešení :-)
    Věřím v jednoho Boha.

    Založit nové vlákno • Nahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.