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í
×
    včera 23:49 | Zajímavý článek

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 26.08.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 2
    včera 17:33 | Zajímavý článek

    Bylo vydáno nové číslo hackerského magazínu tmp.0ut: Volume 5.

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

    Byla vydána nová stabilní verze 8.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 152. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    3.9. 23:11 | Nová verze

    Byla vydána nová stabilní verze 4.0 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). S rozhraním přepsaným do Qt. Přehled novinek také na YouTube. Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 1
    3.9. 16:55 | IT novinky

    NVIDIA kupuje Hugging Face za 12,93 miliardy dolarů.

    Ladislav Hagara | Komentářů: 2
    3.9. 15:44 | IT novinky

    Předobjednat si lze nový jednodeskový počítač Arduino VENTUNO Q s předinstalovaným Ubuntu. S 16 GB LPDDR5 a 64 GB eMMC. Pro lokální LLM, agentní AI, počítačové vidění, robotiku…

    Ladislav Hagara | Komentářů: 0
    3.9. 13:00 | Zajímavý software

    Hexpair není nejlepší HEX editor na světě a ani se o to nesnaží. Zato je k dispozici kdykoliv a kdekoliv – všude tam, kde máte svůj Vim. Vznikl jako hobby projekt před pár měsíci a dospěl do stavu, kdy by mohl být užitečný širší komunitě. Přepnout do HEX režimu se dá i uprostřed rozdělané práce: Soubor, který už máte otevřený běžným vim file.md, jedním příkazem přepnete do HEX editoru a dalším příkazem ho můžete vrátit zpět do textu. Kurzor přitom

    … více »
    Cohen | Komentářů: 0
    3.9. 01:55 | Nasazení Linuxu

    CERN dlouhodobě používal vlastní sestavení RHEL, ze kterého přešel na CentOS Stream. Federico Vaga a Nikos Tsipinakis ale nyní v přednášce na MiniDebConf Winterthur 2026 popisují plán probíhajícího přechodu na Debian pro řízení akcelerátorů. Důvodem k opuštění CentOS Stream jsou zachování zpětné kompatibility se starším hardwarem, kterou Red Hat narušuje, když tlačí sestavení balíčků pro novější verze architektury (x86-64), a nedostatečné nástroje pro sestavování vlastních balíčků a repozitářů.

    |🇵🇸 | Komentářů: 21
    3.9. 01:44 | Nová verze

    UZDoom (Wikipedie), tj. fork GZDoom, byl vydán ve verzi 5.0.0. Videopředstavení na YouTube. Podrobný přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 1
    2.9. 16:11 | Nová verze

    Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.

    |🇵🇸 | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (3%)
     (20%)
     (29%)
     (7%)
     (6%)
     (2%)
     (14%)
     (21%)
    Celkem 2575 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    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: 1073×
    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.