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 00:33 | Nová verze

    Firma Proxmox vydala novou serverovou distribuci Datacenter Manager ve verzi 1.0 (poznámky k vydání). Podobně jako Virtual Environment, Mail Gateway či Backup Server je založená na Debianu, k němuž přidává integraci ZFS, webové administrační rozhraní a další. Datacenter Manager je určený ke správě instalací právě ostatních distribucí Proxmox.

    |🇵🇸 | Komentářů: 2
    včera 23:44 | Nová verze

    Byla vydána nová verze 2.4.66 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 5 bezpečnostních chyb.

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

    Programovací jazyk JavaScript (Wikipedie) dnes slaví 30 let od svého oficiálního představení 4. prosince 1995.

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

    Byly zveřejněny informace o kritické zranitelnosti CVE-2025-55182 s CVSS 10.0 v React Server Components. Zranitelnost je opravena v Reactu 19.0.1, 19.1.2 a 19.2.1.

    Ladislav Hagara | Komentářů: 3
    včera 02:44 | Komunita

    Bylo rozhodnuto, že nejnovější Linux 6.18 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2027. LTS jader je aktuálně šest: 5.10, 5.15, 6.1, 6.6, 6.12 a 6.18.

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

    Byla vydána nová stabilní verze 3.23.0, tj. první z nové řady 3.23, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    3.12. 18:11 | Nová verze

    Byla vydána verze 6.0 webového aplikačního frameworku napsaného v Pythonu Django (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    3.12. 05:55 | Nová verze

    Po více než 7 měsících vývoje od vydání verze 6.8 byla vydána nová verze 6.9 svobodného open source redakčního systému WordPress. Kódové jméno Gene bylo vybráno na počest amerického jazzového klavíristy Gene Harrise (Ray Brown Trio - Summertime).

    Ladislav Hagara | Komentářů: 16
    3.12. 05:11 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za listopad (YouTube).

    Ladislav Hagara | Komentářů: 0
    3.12. 01:55 | Nová verze

    Google Chrome 143 byl prohlášen za stabilní. Nejnovější stabilní verze 143.0.7499.40 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 13 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (47%)
     (19%)
     (18%)
     (23%)
     (15%)
     (25%)
     (16%)
     (18%)
    Celkem 428 hlasů
     Komentářů: 18, poslední 2.12. 18:34
    Rozcestník

    Dotaz: Statická inicializace pole struktur v C++

    10.2.2023 09:53 pou | skóre: 18
    Statická inicializace pole struktur v C++
    Přečteno: 914×
    Dobrý den,

    Dejme tomu že mám tuto třídu v C++

    class TEST{
    
    public:
      TEST();
       typedef struct {
            int a;
       }ITEM;
    
    const ITEM items[];
    
    };
    
    Nyní bych chtěl v konstruktoru třídy TEST() naplnit pole items. Plánuji potom zdědit tuto třídu (TEST) a každý potomek si vytvoří svoje pole items.

    Jak na to? Použití std::vector nebo array atd není možné (embeddded).

    Jediná pro mě zatím funkční varianta je mít takovýto konstruktor:
    TEST(){
        ITEM asfafafsfff[]={
            {4},{5}
        };
        itms=asfafafsfff;
    }
    
    Ale vůbec se mi to nelíbí. Navíc items nemůže být const a busí být definován jako ITEM * items.

    Odpovědi

    10.2.2023 09:57 X
    Rozbalit Rozbalit vše Re: Statická inicializace pole struktur v C++
    Domaci ukol?
    10.2.2023 21:53 pou | skóre: 18
    Rozbalit Rozbalit vše Re: Statická inicializace pole struktur v C++
    Ne, ale díky za odpověď
    10.2.2023 16:07 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Statická inicializace pole struktur v C++

    To je jakýsi podivný mix C++ (class), C (typedef struct) a kdoví, možná i Javy (items[]), ale nejspíš to má být „nekonečné“ pole na konci C99 struktury, které ovšem není ani vzdáleně kompatibilní s C++ (bez přetěžování new a delete), protože samo od sebe není jasné, jak tam mají fungovat konstruktory a destruktory…

    Použití std::vector nebo array atd není možné (embeddded).

    V jakém slova smyslu to není možné? To ten embedded systém nemá alokátor paměti? std::array bude fungovat bez dynamické alokace, přesně k takovému použití je určené…

    Kdo / co určuje velikost pole items? Je k tomu přetížený operátor new a delete? Jak vypadá?

    Ten každý potomek má být ve skutečnosti každá podtřída nebo každá instance? Nebylo by v prvním případě lepší mít to pole statické? (Ať tak nebo tak, asi by mělo být protected a/nebo const.)

    #include <array>
    #include <cstdint>
    #include <utility>
    
    namespace {
    
    template <std::size_t Size>
    struct Test1 {
      struct Item {
        int a;
      };
    
      template <typename... ALike>
      Test1(ALike&&... as) : items_{{.a = std::forward<ALike>(as)}...} {
        static_assert(sizeof...(as) <= Size);
      }
    
     protected:
      const Item items_[Size];
    };
    
    template <std::size_t Size>
    struct Test2 {
      struct Item {
        int a;
      };
    
      template <typename... ALike>
      Test2(ALike&&... as) : items_{Item{.a = std::forward<ALike>(as)}...} {
        static_assert(sizeof...(as) <= Size);
      }
    
     protected:
      const std::array<Item, Size> items_;
    };
    
    }  // namespace
    
    int main() {
      Test1<6> t{1, 2, 3, 4, 5};
      Test2<5>{1, 2, 3, 4};
    }
    
    10.2.2023 22:02 pou | skóre: 18
    Rozbalit Rozbalit vše Re: Statická inicializace pole struktur v C++
    Dobrý den, díky za odpověď.

    Máte pravdu std::array použít můžu - kompilátor to zkompiluje.

    Asi jsem to použil nešťastně (mix C/C++) - proto se rád nechám poučit.

    Nejlépe asi napsat čeho chci dosáhnout:

    Snažím se vytvořit třídu, která na displej vykresluje menu. Položky v menu budou právě v tom seznamu - tedy každá podtřída bude mít svůj set položek. Instance dané podtřídy již seznam měnit nebude (může tedy být konstantní).

    No a celá moje snaha je, aby to bylo přehledně napsané (tedy v konstruktoru jednodušše naplním toto pole) a nejlépe konstantní tak aby se vše uložilo do paměti programu a ne do RAM paměti (položky totiž budou obsahovat text ale i obrázky-ikony).

    Díky
    15.2.2023 14:01 luky
    Rozbalit Rozbalit vše Re: Statická inicializace pole struktur v C++
    To nejde, protoze vnorene pole ve strukturalnim typu musi mit v C++ znamou velikost v dobe prekladu. Musite zadat velikost nebo pouzit ukazatel a pole mit jinde.

    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.