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 15:44 | Zajímavý software

    Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.

    Ladislav Hagara | Komentářů: 0
    dnes 05:11 | Zajímavý článek

    Obrovská poptávka po plynových turbínách zapříčinila, že datová centra začala používat v generátorech dodávajících energii pro provoz AI staré dobré proudové letecké motory, konvertované na plyn. Jejich výhodou je, že jsou menší, lehčí a lépe udržovatelné než jejich průmyslové protějšky. Proto jsou ideální pro dočasné nebo mobilní použití.

    karkar | Komentářů: 1
    včera 19:55 | Nová verze

    Typst byl vydán ve verzi 0.14. Jedná se o rozšiřitelný značkovací jazyk a překladač pro vytváření dokumentů včetně odborných textů s matematickými vzorci, diagramy či bibliografií.

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

    Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.

    Ladislav Hagara | Komentářů: 10
    včera 13:22 | Upozornění

    V Ubuntu 25.10 byl balíček základních nástrojů gnu-coreutils nahrazen balíčkem rust-coreutils se základními nástroji přepsanými do Rustu. Ukázalo se, že nový "date" znefunkčnil automatickou aktualizaci. Pro obnovu je nutno balíček rust-coreutils manuálně aktualizovat.

    Ladislav Hagara | Komentářů: 9
    včera 04:55 | Komunita

    VST 3 je nově pod licencí MIT. S verzí 3.8.0 proběhlo přelicencování zdrojových kódů z licencí "Proprietary Steinberg VST3 License" a "General Public License (GPL) Version 3". VST (Virtual Studio Technology, Wikipedie) je softwarové rozhraní pro komunikaci mezi hostitelským programem a zásuvnými moduly (pluginy), kde tyto moduly slouží ke generování a úpravě digitálního audio signálu.

    Ladislav Hagara | Komentářů: 1
    včera 03:22 | Nová verze

    Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 25.10. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    23.10. 20:11 | Komunita

    V Londýně probíhá dvoudenní Ubuntu Summit 25.10. Na programu je řada zajímavých přednášek. Zhlédnout je lze také na YouTube (23. 10. a 24. 10.).

    Ladislav Hagara | Komentářů: 0
    23.10. 13:22 | Nová verze

    Gemini CLI umožňuje používání AI Gemini přímo v terminálu. Vydána byla verze 0.10.0.

    Ladislav Hagara | Komentářů: 0
    23.10. 12:55 | Pozvánky

    Konference OpenAlt 2025 proběhne již příští víkend 1. a 2. listopadu v Brně. Nabídne přibližně 80 přednášek a workshopů rozdělených do 7 tematických tracků. Program se může ještě mírně měnit až do samotné konference, a to s ohledem na opožděné úpravy abstraktů i případné podzimní virózy. Díky partnerům je vstup na konferenci zdarma. Registrace není nutná. Vyplnění formuláře však pomůže s lepším plánováním dalších ročníků konference.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (48%)
     (20%)
     (20%)
     (24%)
     (18%)
     (21%)
     (18%)
     (18%)
    Celkem 268 hlasů
     Komentářů: 14, poslední 14.10. 09:04
    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: 890×
    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.