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 14:11 | IT novinky

    Jihokorejská kryptoměnová burza Bithumb přiznala vážné selhání interních systémů, které ji vystavilo riziku sabotáže a nezabránilo chybné transakci v hodnotě přes 40 miliard dolarů (814 miliard Kč). Druhá největší kryptoměnová burza v Koreji minulý týden při propagační akci omylem rozeslala zákazníkům zhruba 620 000 bitcoinů místo 620 000 wonů (8700 Kč). Incident vyvolal pokles ceny bitcoinu o 17 procent. Většinu

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 13:55 | Nová verze

    Google Chrome 145 byl prohlášen za stabilní. Nejnovější stabilní verze 145.0.7632.45 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Zpátky je podpora grafického formátu JPEG XL, viz Platform Status. Odstraněna byla před třemi lety. Nový dekodér JPEG XL jxl-rs je napsán v Rustu. Zobrazování JPEG XL lze vyzkoušet na testovací stránce. Povolit lze v nastavení chrome://flags (Enable JXL image format).

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | Nová verze

    Byla vydána nová verze 1.26 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 18:11 | Nová verze

    CrossOver, komerční produkt založený na Wine, byl vydán ve verzi 26. Přehled novinek v ChangeLogu. CrossOver 26 vychází z Wine 11.0, D3DMetal 3.0, DXMT 0.72, Wine Mono 10.4.1 a vkd3d 1.18. Do 17. února lze koupit CrossOver+ se slevou 26 %.

    Ladislav Hagara | Komentářů: 10
    včera 14:22 | Komunita

    KiCad je nově k dispozici také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit [Mastodon, 𝕏].

    Ladislav Hagara | Komentářů: 0
    včera 13:22 | Zajímavý projekt

    Šenčenská firma Seeed Studio představila projekt levného robotického ramena reBot Arm B601, primárně coby pomůcky pro studenty a výzkumníky. Paže má 6 stupňů volnosti, dosah 650 mm a nosnost 1,5 kilogramu, podporované platformy mají být ROS1, ROS2, LeRobot, Pinocchio a Isaac Sim, krom toho bude k dispozici vlastní SDK napsané v Pythonu. Kompletní seznam součástek, videonávody a nejspíš i cena budou zveřejněny až koncem tohoto měsíce.

    … více »
    NUKE GAZA! 🎆 | Komentářů: 7
    včera 11:11 | Nová verze

    Byla vydána nová verze 36.0, tj. první stabilní verze nové řady 36, svobodného multimediálního centra MythTV (Wikipedie). Přehled novinek a vylepšení v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    včera 04:44 | Nová verze

    Byl vydán LineageOS 23.2 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu.

    Ladislav Hagara | Komentářů: 3
    včera 03:44 | IT novinky

    Od března budou mít uživatelé Discordu bez ověření věku pouze minimální práva vhodná pro teenagery.

    Ladislav Hagara | Komentářů: 23
    9.2. 23:43 | IT novinky

    Evropská komise (EK) předběžně shledala čínskou sociální síť pro sdílení krátkých videí TikTok návykovým designem v rozporu s unijním nařízením o digitálních službách (DSA). Komise, která je exekutivním orgánem Evropské unie a má rozsáhlé pravomoci, o tom informovala v tiskovém sdělení. TikTok v reakci uvedl, že EK o platformě vykreslila podle něj zcela nepravdivý obraz, a proto se bude bránit.… více »

    Ladislav Hagara | Komentářů: 20
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (10%)
     (26%)
     (3%)
     (5%)
     (2%)
     (12%)
     (28%)
    Celkem 835 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: 3 otázky na C++

    10.10.2020 15:37 Naples
    3 otázky na C++
    Přečteno: 557×
    1. Možno to niekomu príde ako hnidopišské otázky, ale imho prvá je dôležitá pre pochopenie základných princípov.
    template<typename T>
    void foo(const T something)
    {
        // akého typu bude T
    }
    zavolám funkciu takto:
    auto my = "xyz"; // my je typu const char*
    foo(my);
    
    Premená my je typu const char*, lenže pred typom funkcie už const je, const pred argumentom znamená že hodnota argumentu sa nedá modifikovať. lenže const char* je aj samostatný typ, (nekompatibilný s char*) Aký typ bude mať parameter T?

    char*? alebo const char*;

    A je zápis void foo(const const char* something) ekvivalentný k void foo(const char* something)?

    2. ako v static_asserte vypíšem aktuálny názov typu priradený do template parametra? Príklad:
    #define requires_some_type(Type) \
        static_assert(std::is_same_v<Type, some_type>, __FUNCTION__ ": The parameter '" #Type "' was expected to have type 'some_type', but here has type '" (sem niečo patrí) "'");
    3. Dajme tomu že chcem niečo testovať takto:
    if constexpr (vyraz) 
    {
        // nejaky kod
    }
    else
    {
        static_assert(false, "Some message");
    }
    a v else vetve chcem vypísať chybovú, hlášku ktorá sa zobrazí v compile time. Neexistuje nejaká náhrada za static assert ktorá vypíše len chybovú hlášku bez potreby testovania výrazu?

    Odpovědi

    10.10.2020 15:42 hitler
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    Ad 1, první odkaz na googlu (rozbil se ti?):

    [C++11: 14.1/4]: A non-type template-parameter shall have one of the following (optionally cv-qualified) types:

    integral or enumeration type,

    pointer to object or pointer to function,

    lvalue reference to object or lvalue reference to function,

    pointer to member,

    std::nullptr_t.

    [C++11: 14.1/5]: The top-level cv-qualifiers on the template-parameter are ignored when determining its type.
    NUKE GAZA! 🎆 avatar 10.10.2020 16:30 NUKE GAZA! 🎆 | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: 3 otázky na C++

    použít typeindex a typeinfo by asi jako možná šlo hele :O :O

    #include <iostream>
    #include <typeindex> 
    #include <typeinfo> 
         
    template<typename T> void test(T typ)
    {
        std::type_index index(typeid(typ));
        std::cout << index.name() << std::endl;
    }
    
    int main() 
    { 
        int cislo = 123;
        std::string str = "venku hrozne prsi tedko :O :O";
        const char * cchar = "a uvnitr taky protoze vitr sebral strechu :O :O :O :O";
    
        test(cislo);
        test(str);
        test(cchar);
    
        return 0; 
    } 
    

    noa jestli si fortrane ;D ;D přešel nato gcc tak nám to vrací ty typy v mangled formě :O :/

    v linuxu to de vodmanglovat nástroječkem co se menuje c++filt hele takle ty data typy

    c++filt -t PKc
    

    a vrátit by to mělo const char *

    10.10.2020 17:43 DETEKTIVCOLOMBOS.R.O.
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    Morava.
    11.10.2020 11:52 Naples
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    Ďakujem Grétuška, ale toto nejde v compile-time, pri staic_assert-e (ktorý generuje chybové hlášky počas kompilácie). Tvoje riešenie je skvelé pri runtime ale ja by som potreboval niečo obdobné pre compile-time.
    10.10.2020 18:20 10minuteman
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    T neni "nejakeho typu", T je typ. V tvem prikladu je to const char *.

    Jakeho typu je something? Typu const T.

    const char * znamena ukazatel na const char - tedy const je ten char uvnitr, ne pointer.

    const T znamena konstantni typ T, takze to vyjde:

    const char * const tedy konstantni ukazatel na konstantni char.

    Kdybys pouzival east-const, tak je to jasne videt: (char const *) + (T const) = (char const * const)

    11.10.2020 11:32 Naples
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    Ahá super dík. Za info. V tom prvom bode mám už jasno.
    12.10.2020 09:11 doon
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    ad 3: to jsem teď nedávno taky řešil

    definuješ si pomocný výraz:
    template<typename T>
    constexpr bool always_false = false;
    
    a pak použiješ v else větvi:
    static_assert(always_false<T>, "Some message")
    
    12.10.2020 09:49 MadCatX | skóre: 28 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    1. V čem je tohle lepší než static_assert(false, "Assertion failed");?
    2. V jakém případě má smysl dávat do else větve if constexpr podmínky vždy nesplněný assert? Není jednodušší tu podmínku nacpat přímo do static_assertu? Výsledný kód bude přehlednější a navíc půjde přeložit i na překladačích, co ještě neznají constexpr podmínky.
    NUKE GAZA! 🎆 avatar 12.10.2020 13:46 NUKE GAZA! 🎆 | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: 3 otázky na C++

    V čem je tohle lepší než static_assert(false, "Assertion failed");?

    asi to jakoby fakt bude správná vodpověď natu trojku protože todleto fakt umí v template funkci vypsat datovej typ narozdíl vod static_assert(false,"blah") :O :O :D ;D

    template<typename T>
    constexpr bool always_false = false;
    
    template <typename T> void test(T blah)
    {
        static_assert(false, "venku vuuuubec neprsi");
        static_assert(always_false<T>, "protoze greta neni z moravy :D ;D");
    }
    
    int main()
    {
        test(10.0);
        return 0;
    }
    
    
    

    noa g++ nám zanadává v druhým assertu v hranatejch závorkách jakej to byl jako typename vtý šabloně strčenej :O :O :O :O

    assertovani.cpp: In function ‘void test(T)’:
    assertovani.cpp:6:15: error: static assertion failed: venku vuuuubec neprsi
        6 | static_assert(false, "venku vuuuubec neprsi");
          |               ^~~~~
    assertovani.cpp: In instantiation of ‘void test(T) [with T = double]’:
    assertovani.cpp:12:10:   required from here
    assertovani.cpp:7:15: error: static assertion failed: protoze greta neni z moravy :D ;D
        7 | static_assert(always_false<T>, "protoze greta neni z moravy :D ;D");
          |               ^~~~~~~~~~~~~~~
    
    

    možná je nějaký víc elegantnější řešení jak tam to T jakoby nějak strčit dotoho assertu ale nevim :O :O

    12.10.2020 14:59 MadCatX | skóre: 28 | blog: dev_urandom
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    Tohle bude záležet na kompilátoru. Např. pořád dost používané MSVC14 tenhle konstrukt vůbec nepřeloží. Navíc kdyby tu podmínku měl rovnou v tom assertu, dostane úplně totéž chování bez zbytečného zanoření. Ne že by compile-time if byl k ničemu ale v tomhle případě mi jeho použití přijde nevhodné.
    12.10.2020 23:35 doon
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    static_assert(false) v constexpr ifu nefunguje

    ten pomocný výraz to vyhodnocení "odloží" - je to hack a constexpr if by měl být asi chytřejší, ale bohužel...

    já jsem to použil následovně:
    // enum class Policy {};
    // template<Policy T>
    
    if constexpr (T == Policy::Random) {
        // kúštěk kódu
    } else if constexpr (T == Policy::FIFO) {
        // kúštěk kódu
    } else {
        static_assert(always_false<T>, "Using unimplemented Policy");
    }
    
    neříkám, že to nejde udělat jinak, ale static_assert dává mnohem hezčí chybové hlášky

    btw. (ne)pěkně to c++ bobtná
    13.10.2020 01:21 MadCatX
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    Jo jo, máš pravdu. Uvědomil jsem si to, až když jsem si s tím chvíli hrál. Podmínka static_assertu musí záviset na šablonovém parametru, aby se vyhodnotila "selektivně".
    13.10.2020 13:18 frr | skóre: 34
    Rozbalit Rozbalit vše Re: 3 otázky na C++
    ...po dvaceti letech spánku mi spadl na hlavu kokosový ořech, což mě vzbudilo a rozespale mžourám na to zadání... ad 3: "at compile time" mi evokuje pradávná makra jako #if #error #warning #else #endif [1|2] plus mě šimrá v lebce typeof/typeid . Ale mám neblahé podezření, že prvně uvedená klasická #makra se expandují ještě dřív, než se kompilátor pustí do instanciace šablon<>... takže bych měl asi zalézt a spát dál, protože to není odpověď na původní dotaz...
    [:wq]

    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.