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:33 | Nová verze Ladislav Hagara | Komentářů: 0
    dnes 12:33 | Zajímavý projekt

    FRANK OS je open-source operační systém pro mikrokontrolér RP2350 (s FRANK M2 board) postavený na FreeRTOS, který přetváří tento levný čip na plně funkční počítač s desktopovým uživatelským rozhraním ve stylu Windows 95 se správcem oken, terminálem, prohlížečem souborů a knihovnou aplikací, ovládaný PS/2 myší a klávesnicí, s DVI video výstupem. Otázkou zůstává, zda by 520 KB SRAM stačilo každému 😅.

    NUKE GAZA! 🎆 | Komentářů: 1
    včera 22:55 | IT novinky

    Administrativa amerického prezidenta Donalda Trumpa by měla dostat zhruba deset miliard dolarů (asi 214 miliard Kč) za zprostředkování dohody o převzetí kontroly nad aktivitami sociální sítě TikTok ve Spojených státech.

    Ladislav Hagara | Komentářů: 1
    včera 21:33 | Nová verze

    Projekt Debian aktualizoval obrazy stabilní větve „Trixie“ (13.4). Shrnuje opravy za poslední dva měsíce, 111 aktualizovaných balíčků a 67 bezpečnostních hlášení. Opravy se týkají mj. chyb v glibc nebo webovém serveru Apache.

    |🇵🇸 | Komentářů: 2
    včera 13:00 | Humor

    Agent umělé inteligence Claude Opus ignoroval uživatelovu odpověď 'ne' na dotaz, zda má implementovat změny kódu, a přesto se pokusil změny provést. Agent si odpověď 'ne' vysvětlil následovně: Uživatel na mou otázku 'Mám to implementovat?' odpověděl 'ne' - ale když se podívám na kontext, myslím, že tím 'ne' odpovídá na to, abych žádal o svolení, tedy myslí 'prostě to udělej, přestaň se ptát'.

    NUKE GAZA! 🎆 | Komentářů: 11
    včera 00:44 | IT novinky

    Po 8. květnu 2026 už na Instagramu nebudou podporované zprávy opatřené koncovým šifrováním. V chatech, kterých se bude změna týkat, se objeví pokyny o tom, jak si média nebo zprávy z nich stáhnout, pokud si je chcete ponechat.

    Ladislav Hagara | Komentářů: 7
    včera 00:33 | IT novinky

    V lednu byla ve veřejné betě obnovena sociální síť Digg (Wikipedie). Dnes bylo oznámeno její ukončení (Hard Reset). Společnost Digg propouští velkou část týmu a přiznává, že se nepodařilo najít správné místo na trhu. Důvody jsou masivní problém s boty a silná konkurence. Společnost Digg nekončí, malý tým pokračuje v práci na zcela novém přístupu. Cílem je vybudovat platformu, kde lze důvěřovat obsahu i lidem za ním. Od dubna se do Diggu na plný úvazek vrací Kevin Rose, zakladatel Diggu z roku 2004.

    Ladislav Hagara | Komentářů: 5
    13.3. 12:33 | Zajímavý projekt

    MALUS je kontroverzní proprietarní nástroj, který svým zákazníkům umožňuje nechat AI, která dle tvrzení provozovatelů nikdy neviděla původní zdrojový kód, analyzovat dokumentaci, API a veřejná rozhraní jakéhokoliv open-source projektu a následně úplně od píky vygenerovat funkčně ekvivalentní software, ovšem pod libovolnou licencí.

    NUKE GAZA! 🎆 | Komentářů: 17
    13.3. 03:55 | Bezpečnostní upozornění

    Příspěvek na blogu Ubuntu upozorňuje na několik zranitelností v rozšíření Linuxu o mandatorní řízení přístupu AppArmor. Společně jsou označovány jako CrackArmor. Objevila je společnost Qualys (technické detaily). Neprivilegovaný lokální uživatel se může stát rootem. Chyba existuje od roku 2017. Doporučuje se okamžitá aktualizace. Problém se týká Ubuntu, Debianu nebo SUSE. Red Hat nebo Fedora pro mandatorní řízení přístupu používají SELinux.

    Ladislav Hagara | Komentářů: 2
    12.3. 17:22 | Nová verze

    Byla vydána nová verze 19 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v changelogu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (16%)
     (7%)
     (0%)
     (11%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1083 hlasů
     Komentářů: 26, poslední 12.3. 08:56
    Rozcestník

    Dotaz: [c++2a] Aggregate initialization

    hermes avatar 4.10.2021 17:47 hermes | skóre: 7 | blog: Elektro | BA
    [c++2a] Aggregate initialization
    Přečteno: 503×
    Ahojte, občas používam anemické objekty (alebo čo to je) ako prepravky... (Napríklad keď si robím restové API a deserializujem JSONy, ktoré potom ukladám do DB.) Problém je, že C++ štandard je veľmi striktný, atribúty musím pri inicializácii zadať v rovnakom poradí, ako som ich deklaroval v triede a nemôžem ich vynechať. Prečo to tak je? A dá sa to nejako obísť? Nejakým parametrom compilera (GCC), alebo nejakým iným zápisom? Niečo sa mi marí, že v čistom (novom) C som raz videl aj iný spôsob zápisu (tuším každá propsa spolu s hodnotou bola obalená ešte v jednom páre zložených zátvoriek), ale ten v C++ nefunguje. Má to teda nejaké riešenie?
    struct Entity
    {
        int prop1;
        int prop2;
        int prop3;
    };
    
    auto entity = Entity{ .prop1 = 1, .prop2 = 2, .prop3 = 3 };

    Řešení dotazu:


    Odpovědi

    Řešení 1× (Bhezret)
    4.10.2021 18:23 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization

    Možná to chce udělat krok zpátky a podrobněji popsat, jaký problém řešíš, a zejména proč je pro řešení toho problému tak důležité proměnlivé pořadí členů ve třídě a proč se nedá najít v C++ taková reprezentace, která to pořadí bude mít „správně“.

    Nedá se zkrátka pořadí členů permutovat tak, aby mu obvyklý způsob inicializace odpovídal?

    Pokud to nejde a někteří členové nemusí být k dispozici, dá se použít std::optional (pro přímé zapouzdření) nebo std::unique_ptr (pro „zapouzdření“ à la Java)?

    Pokud se pořadí některých členů musí fakt libovolně náhodně lišit (proč?), pomohl by třeba std::variant nebo dynamický kontejner nebo kombinace obojího?

    Nedá se to rozdělit na víc různých typů? Nepomohla by dědičnost a mít to, co je vždy k dispozici, ve společném rodiči? (Což je opět stejná otázka jako „je možná permutace taková, že…“.)

    hermes avatar 4.10.2021 23:31 hermes | skóre: 7 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization
    Prečo to potrebujem? Je za tým viac dôvodov. Občas to pomôže sprehľadniť kód. V iných jazykoch sú plain objekty mocná zbraň... V JS / TSku sa dajú plain objecty používajú napríklad ako náhrada za pomenované parametre. Ale je za tým aj to vynechávanie. Keby to bolo o niečo málo flexibilnejšie, malo by to viac use cases.
    5.10.2021 03:14 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization

    Pokud to má být extrémní flexibilita bez ohledu na efektivitu, třeba je to případ pro std::unordered_map<std::string, std::variant<Spousta, Různých, Variant, ...>>. I když, pro ještě větší podobnost JavaScriptu by ten klíč měl být asi std::variant<Nějaké, Skalární, Typy, ...> místo std::string.

    Jenže: Proč dělat z C++ JavaScript? Určitě se ten nápad dá v C++ vyjádřit líp a „idiomaticky“. Pokud ne, třeba je lepší to nechat v JavaScriptu.

    NUKE GAZA! 🎆 avatar 4.10.2021 21:27 NUKE GAZA! 🎆 | skóre: 41 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization

    co jakoby takle uplně jednoduše :D

    struct Entity
    {
        int a, b, c;
    };
    
    int main()
    {
        
        Entity hermes;
        hermes.c=1;
        hermes.b=2;
        hermes.a=3;
        
        return 0;
    }
    
    hermes avatar 4.10.2021 23:32 hermes | skóre: 7 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization
    No len nevýhoda je, že to už neni inicializácia, ale priraďovanie, veľakrát je to skoro jedno, ale keby tam bol napr. const tak by to nefungovalo. Okrem toho v niektorých situáciách sa snažím preferovať immutablitu a teda inicializáciu pred priraďovaním.
    5.10.2021 03:03 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization

    Ale const tam můžeš mít taky, kdybys setsakra moc chtěl. Stačí, aby ta třída měla (implicitně nebo explicitně) &&-konstruktor.

    const Entity hermes{[] {
      Entity result;
      result.c = 1;
      result.b = 2;
      result.a = 3;
      return result;
    }()};
    

    Jenom bych se vsadil, že se ty typy dají uspořádat (a spořádaně konstruktory inicializovat) mnohem líp než takhle.

    5.10.2021 03:06 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization

    Mám ještě dojem, že kolem toho volání lambdy musí být extra závorky nebo tak něco. Kompilátor napoví. Ale to už jsou jenom technikálie (vzor: fekálie); princip zůstává.

    Řešení 1× (NUKE GAZA! 🎆)
    5.10.2021 09:45 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization
    atribúty musím pri inicializácii zadať v rovnakom poradí, ako som ich deklaroval v triede a nemôžem ich vynechať

    g++ od verze 8 sice trvá na zachování pořadí, ale už lze inicializátory vynechávat (příslušný člen je pak null initialized jako v C).

    Niečo sa mi marí, že v čistom (novom) C som raz videl aj iný spôsob zápisu (tuším každá propsa spolu s hodnotou bola obalená ešte v jednom páre zložených zátvoriek)

    Nic tak komplikovaného, prostě jen místo anonymních inicializátorů použijete pojmenované. Funguje to už od C90:

    #include <stdio.h>
    
    struct entity {
            int     prop1;
            int     prop2;
            int     prop3;
    };
    
    int main()
    {
            struct entity e = {
                    .prop3  = 3,
                    .prop1  = 1,
            };
    
            printf("prop1=%d, prop2=%d, prop3=%d\n", e.prop1, e.prop2, e.prop3);
    
            return 0;
    }
    
    mike@lion:/tmp/test> gcc-12 --std=c90 -Wall -Wextra -o x x.c
    mike@lion:/tmp/test> ./x
    prop1=1, prop2=0, prop3=3
    

    Třicet let standardizovaná featura mi nepřijde až tak horká novinka. :-)

    5.10.2021 09:59 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization
    Vnořené složené závorky jste možná mohl vidět, pokud se inicializovalo např. pole struktur nebo vnořené struktury.
    6.10.2021 10:41 luky
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization
    Prekladejte to C prekladacem a prilinkujte si to k C++ aplikaci.
    6.10.2021 20:41 Jardík
    Rozbalit Rozbalit vše Re: [c++2a] Aggregate initialization
    Tady např. vysvětlují důvod.

    Podělaný semafory.

    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.