C++ – Metaprogramování a výkonné aplikace (CPP5)

Programování, C, C++

Od C++20 máme k dispozici koncepty, které zásadním způsobem ulehčují používání šablon a typových argumentů. Je to další zásadní krok pro embedded software a náročné aplikace, kdy se upouští od používání virtuálních metod a klasického objektově orientovaného programování ve prospěch vysokého výkonu a předvídatelných latencí.

Ne všichni budete moci od začátku využívat C++26, které obohacuje metaprogramování o reflexi v době kompilace. Ta vám časem umožní spoustu věcí vyjádřit stručněji a srozumitelněji. Na druhou stranu C++ nabízí spoustu knihovních nástrojů, kterými se můžete inspirovat a vytvořit si vlastní implementaci.

Kurz je od základu postavený pro standardy C++20, C++23 a C++26. Na požádání lze upravit pro starší verzi C++.

TOTO ŠKOLENÍ VÁM POMŮŽE:

  • Uvědomit si možnosti optimalizací při kompilaci kódu v C++
  • Seznámit se s možnostmi metaprogramování v nejnovějších verzích C++
  • Vyzkoušet si práci se šablonami na mnoho různých způsobů
  • Porozumět fungování spouštění C++ kódu v době kompilace

KDO BY SE MĚL KURZU ZÚČASTNIT?

  • Zkušení vývojáři v C++, kteří chtějí aktualizovat své znalosti
  • Vývojáři v C++, kteří se chtějí naučit pracovat s šablonami, koncepty a constexpr
  • Zájemci o průmyslové programovací jazyky a jejich možnosti a omezení

Privátní školení a termíny na míru

Specifičnost tohoto školení a nízký zájem jednotlivců neumožňuje pro tento kurz vypisovat veřejné termíny. Tento kurz nabízíme pouze jako uzavřené privátní školení. Obsah, délka a termíny kurzů budou vytvořeny podle vašich specifických potřeb.

Cenovou nabídku vám rádi připravíme na základě vašich požadavků a cílů zaslaných e-mailem nebo zadaných prostřednictvím poptávkového formuláře. Cena privátního školení vychází z náročnosti požadované obsahové náplně školení, časového rozsahu a celkového počtu přihlášených osob.

KDE A KDY KURZ PROBÍHÁ?

Kontaktujte nás

S námi máte na výběr: Přijďte na kurz osobně do naší učebny, nebo se ke kurzu připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení naleznete zde.

Náplň kurzu:

Skrýt detaily
  • Metaprogramování v C++20 a C++23
    1. Tvorba výkonného obecného kódu
    2. Umožnění maximální optimalizace
    3. Přehlednější a srozumitelnější než dříve
  • Programování pomocí šablon
    1. Parametrické datové struktury
    2. Obecné algoritmy a pomocné struktury
    3. Statická typová kontrola a safety
  • Specializace šablon
    1. Zvláštní zacházení s konkrétními případy
    2. Specializace pomocí tagování a policy
    3. Metafunkce a výpočty v době kompilace
  • Vymezení typových parametrů
    1. Dokumentace požadavků na typy
    2. SFINAE a programování pomocí type traits
    3. Explicitní vymezení a concepts
  • Pohodlnější práce s šablonami
    1. Zkrácené šablony funkcí
    2. Deducing this a perfect forwarding
    3. CTAD a vynechávání typových parametrů
  • Kombinace OOP a šablon
    1. Využití dědičnosti bez virtuálních metod
    2. Doplňování funkcionality pomocí CRTP
    3. Vymazání typů pomocí šablon a dědičnosti
  • Variadické šablony
    1. Proměnný počet parametrů
    2. Výrazy založené na sadách parametrů
    3. Techniky založené na vícenásobné dědičnosti
  • Knihovny v hlavičkových souborech
    1. Moderní význam keywordu inline
    2. ODR a jak to všechno funguje
    3. Kombinace se šablonami a třídami
  • Metaprogramování mimo šablony
    1. Vyhodnocování v době kompilace
    2. Klíčová slova constexpr a consteval
    3. Podmínky if constexpr a if consteval
    4. Použití static_assert()
  • Kombinace constexpr a šablon
    1. Větvení podle typu v době kompilace
    2. Zásadní zjednodušení některých šablon
    3. Šablony constexpr funkcí a proměnných
  • Design šablonových knihoven
    1. Metody nebo globální funkce
    2. vyhledávání podle argumentu (ADL)
    3. Bod přizpůsobení (customization point)
  • Implementace univerzálních šablon
    1. Specializované chytré ukazatele
    2. Vlastní kontejnerové typy
    3. Datové struktury bez dynamické alokace
  • Bonus: Reflexe v C++26
    1. Informace o typech a proměnných
    2. Vkládání informací do kódu
    3. Praktická aplikace reflexe
Předpokládané znalosti:
Dobrá znalost programování v jazyce C++
Doporučený předchozí kurz:
C++ – Praktické programování pro pokročilé (CPP2)
Doporučený následný kurz:
C++ – Návrhové vzory a idiomy (CPP3)
Časový rozvrh:
3 dny (9:00hod. - 17:00hod.)