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í
×
    dnes 03:33 | Zajímavý článek

    Mozilla před dvěma týdny na svém blogu oznámila, že díky Claude Mythos Preview bylo ve Firefoxu nalezeno a opraveno 271 bezpečnostních chyb. Včera vyšel na Mozilla Hacks článek s podrobnějšími informacemi. Z 271 bezpečnostních chyb mělo 180 chyb vysokou závažnost, 80 chyb střední závažnost a 11 chyb nízkou závažnost. Celkově bylo v dubnu ve Firefoxu opraveno 423 bezpečnostních chyb. Čísla CVE nemusí být přiřazována jednotlivým chybám. CVE-2026-6784 například představuje 154 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    včera 22:55 | Bezpečnostní upozornění

    Před týdnem zranitelnost Copy Fail. Dnes zranitelnost Dirty Frag. Běžný uživatel může na Linuxu získat práva roota (lokální eskalaci práv). Na většině linuxových distribucí vydaných od roku 2017. Aktuálně bez oficiální záplaty a CVE čísla [oss-security mailing list].

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | Humor

    Ačkoli je papež Lev XIV. hlavou katolické církve a stojí v čele více než miliardy věřících po celém světě, také on někdy řeší všední potíže. A kdo v životě neměl problémy se zákaznickou linkou? Krátce poté, co nastoupil do úřadu, musel papež se svou bankou řešit změnu údajů. Operátorka ale nechtěla uvěřit, s kým mluví, a Svatému otci zavěsila.

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Nová verze

    Incus, komunitní fork nástroje pro správu kontejnerů LXD, byl vydán ve verzi 7.0 LTS (YouTube). Stejně tak související LXC a LXCFS.

    Ladislav Hagara | Komentářů: 0
    včera 05:00 | Nová verze

    Google Chrome 148 byl prohlášen za stabilní. Nejnovější stabilní verze 148.0.7778.96 přináší řadu novinek z hlediska uživatelů i vývojářů. Vypíchnout lze Prompt API (demo) pro přímý přístup k AI v zařízení. Podrobný přehled v poznámkách k vydání. Opraveno bylo 127 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    6.5. 16:44 | Komunita

    Richard Hughes oznámil, že po společnostech Red Hat a Framework a organizacích OSFF a Linux Foundation, službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzorují také společnosti Dell a Lenovo. Do dnešního dne bylo díky LVFS provedeno více než 145 milionů aktualizací firmwarů od více než 100 různých výrobců na milionech linuxových zařízení.

    Ladislav Hagara | Komentářů: 0
    6.5. 15:22 | IT novinky

    Americké technologické společnosti Microsoft, Google a xAI souhlasily, že vládě Spojených států poskytnou přístup k novým modelům umělé inteligence (AI) před jejich uvedením na trh. Oznámila to americká vláda, která tak bude moci prověřit, zda modely nepředstavují hrozbu pro národní bezpečnost. Oznámení podtrhuje rostoucí obavy Washingtonu z rizik spojených s výkonnými AI systémy. Americké úřady chtějí v rámci předběžného přístupu

    … více »
    Ladislav Hagara | Komentářů: 1
    6.5. 14:11 | IT novinky

    Společnost Valve zveřejnila (GitLab) nákresy ovladače Steam Controller a puku. Pro všechny, kdo by jej chtěli hacknout nebo modifikovat, případně pro ně navrhnout nějaké příslušenství. Pod licencí Creative Commons (CC BY-NC-SA 4.0).

    Ladislav Hagara | Komentářů: 0
    6.5. 12:44 | Komunita

    PHP bylo dlouho distribuováno pod vlastní licencí – s výjimkou částí spadajících pod licenci Zend Engine. Po několikaleté práci se povedlo PHP přelicencovat na 3bodovou licenci BSD.

    Ladislav Hagara | Komentářů: 0
    6.5. 05:00 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube). Na Linuxu je vedle Qt frontendu nově k dispozici také GTK4 / libadwaita frontend.

    Ladislav Hagara | Komentářů: 20
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (9%)
     (2%)
     (14%)
     (32%)
     (4%)
     (7%)
     (3%)
     (16%)
     (24%)
    Celkem 1529 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: Ako zavolať metódu triedy cez Template parameter?

    hermes avatar 27.6.2021 23:38 hermes | skóre: 7 | blog: Elektro | BA
    Ako zavolať metódu triedy cez Template parameter?
    Přečteno: 672×
    Ahojte snažím sa zavolať metódu tiredy cez template parameter, inej metódy, toto čo tu uvádzam je len príklad nie skutočný Controller aj keď v reále robím wrapper nad jednu HTTPServer libku. A niečo podobné tam používam. Toto sa mi dá skompilovať:
    class Request {}; class Response {};
    
    class Controller
    {
    public:
    	void BeforeAction(Request request, Response response)
    	{
    		std::cout << "BeforeAction" << std::endl;
    	}
    
    	template<typename C, typename void(C::* Action)(Request request, Response response)>
    	void CallAction(
    		Request request,
    		Response response
    	)
    	{
    		this->BeforeAction(request, response);
    		(static_cast<C*>(this)->*Action)(request, response);
    	}
    };
    
    class HomeController : public Controller
    {
    public:
    	void HandleIndex(
    		Request request,
    		Response response
    	)
    	{
    		std::cout << "HandleIndex" << std::endl;
    	}
    };
    auto controller = HomeController();
    auto request = Request();
    auto response = Response();
    controller.CallAction<HomeController, &HomeController::HandleIndex>(request, response);
    
    Ale chcel by som to ešte trošku "učesať" chcel by som aby som nemusel uvádzať ten prvý template parameter v CallAction action metóde (názov triedy). Teda buď aby som ho nemusel vôbec uvádzať, alebo aby sa odvodil nejako pomocou type inference. Viete mi prosím poradiť ako na to? Zdá sa mi zbytočne uvádzať ho 2x porušuje to princíp DRY.

    Řešení dotazu:


    Odpovědi

    Řešení 2× (Вherzet, Jеdna)
    hermes avatar 27.6.2021 23:39 hermes | skóre: 7 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    Joo a ešte som zabudol napísať, že ide o jazyk C++.
    MakeIranBombedAgain❗ avatar 28.6.2021 11:49 MakeIranBombedAgain❗ | skóre: 42 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?

    proč prostě jakoby nepoužiješ polymorfizmuz?? :O :O stejně asi jako všecky ty voběkty musej mit to action by to fungovalo takže asi dědit z jednoho předka společnýho :O :O

    hermes avatar 29.6.2021 23:23 hermes | skóre: 7 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    Ahoj Controller je len bázová trieda, predok všetkých Controllerov od ktorej dedím ostatné custom Controlley.

    Akcie definujem až v potomkoch. Nemôžem ju definovať už v triede Controller, ako virtuálnu metódu a potom ju overridnúť v potomkovi, keďže vopred neviem aký názov Akcií zvolím v potomkovi a akcie môžu mať praktiocky ľubovolný názov.

    Príklad: môžem mať

    HomeController s názvom akcií
    • HandleIndex pre route pattern /home/index
    • HandleAbout pre route pattern /home/about
    ArticleController s Akciami:
    • HandleShow pre pattern /article/show/:articleUri
    • HandleEdit pre pattern /article/edit/:articleUri
    • HandleDelete pre pattern /article/delete/:articleUri
    BeforeAction môžem definovať už v tirede Controller a potom ho overridnúť, keďže to je univerzálna pomocná metóda, ktorá má už vopred daný názov a tá sa zavolá pred zavolaním akejkoľvek akcie. Môžem si v nej nadefinovať napr. spoločné HTTP hlavičky pre všetky akcie. Aby som ich nemusel definovať v každej akcii zvlášť.
    MakeIranBombedAgain❗ avatar 1.7.2021 12:31 MakeIranBombedAgain❗ | skóre: 42 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?

    keďže vopred neviem aký názov Akcií zvolím v potomkovi a akcie môžu mať praktiocky ľubovolný názov

    jestli jako všecky berou jako argumenty 'request' a 'response' anic víc nic míň by nato šlo možná jít přez function pointery který by byly strkaný jako argument do tý metody 'CallAction' :O :O

    jak se jako zbavit toho datovýho typu v šabloně navíc zatim nevim :D toje moc velikakakakánská c++ magie ukazatele na metody nastrkaný do šablony :D :D

    2.7.2021 00:24 Jardík
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    
    class Request {}; class Response {};
     
    class Controller
    {
    public:
        void BeforeAction(Request request, Response response)
        {
            std::cout << "BeforeAction" << std::endl;
        }
    
        
        template<typename C>
        void CallAction(
            void(C::*func)(Request, Response),
            Request request,
            Response response
        )
        {
            this->BeforeAction(request, response);
            (static_cast<C*>(this)->*func)(request, response);
        }
        
    };
     
    class HomeController : public Controller
    {
    public:
        void HandleIndex(
            Request request,
            Response response
        )
        {
            std::cout << "HandleIndex" << std::endl;
        }
    };
    
    int main()
    {
        auto controller = HomeController();
        auto request = Request();
        auto response = Response();
        controller.CallAction(&HomeController::HandleIndex, request, response);
    }
    
    
    MakeIranBombedAgain❗ avatar 4.7.2021 10:53 MakeIranBombedAgain❗ | skóre: 42 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?

    nemaj se function pointery jakoby teďko dělat se std::function hele?? :O :O

    4.7.2021 11:43 Jardík
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    Záleží, co od toho čekáš (syntaxe, použití) a/nebo jak moc je/není potřeba (mikro)optimalizovat :-) Pokud by třeba metoda CallAction přebírala std::function<void(Request, Response)>, tak buď bude v místě volání jako parametr hnusný std::bind(&HomeController::HandleIndex, controller, std::placeholders::_1, std::placeholders::_2) (který zároveň často likviduje optimalizace), nebo tam bude lambda [&](Request req, Response res){controller.HandleIndex(std::move(req), std::move(res));}.

    Member function pointer mi zde přijde jako asi přehlednější řešení podle požadavku autora dotazu. Codegen vypadá nejlepší s původním řešením autora ... https://godbolt.org/z/nYbGfoPrW (vlevo řešení s předáním member function jako parametru, uprostřed member function jako template parameter, vpravo předání přes std::function). Osobně jsem čekal, že codegen 1. a 2. bude stejný, že to kompilátor zoptimalizuje, ale asi se mu to moc nedaří ...
    hermes avatar 6.7.2021 00:18 hermes | skóre: 7 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    hej std::function by to v tomto prípade celé komplikoval.
    MakeIranBombedAgain❗ avatar 6.7.2021 11:52 MakeIranBombedAgain❗ | skóre: 42 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    hermes avatar 6.7.2021 00:15 hermes | skóre: 7 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?
    Ahoj ďakujem za zjednodušenie :) funguje to
    MakeIranBombedAgain❗ avatar 1.7.2021 12:23 MakeIranBombedAgain❗ | skóre: 42 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: Ako zavolať metódu triedy cez Template parameter?

    Toto sa mi dá skompilovať:

    btw by se mi to zkompilovalo v g++ 10 sem musela přepsat jedenáctej řádek na

    template<class C, void(C::* Action)(Request, Response)>

    Založit nové vláknoNahoru

    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.