Bevezetés a varázslatos mintákat, savepearlharbor

Sablonok C ++ meta-programozási eszközök és megvalósítani egy fordítási idejű polimorfizmus. Mi ez?
Ez az, amikor írunk kódot polimorf viselkedést, de a viselkedése maga határozza fordításkor - azaz szemben a virtuális függvény polimorfizmus kapott bináris lesz már állandó viselkedést.


Az általunk használt sablonok szépség. Minden C ++ fejlesztő tudja, mi a szépség, a szépség - az, amikor a kompakt kódot. intuitív és gyors.

Meta-mágia és implicit felületek

Az első varázslatok mágikus husáng


Konkretizálják a sablont, és nézzük, milyen kaptunk különböző sablon paraméterei:

Ez látható a program kimenete, mely típusú sablon példányosítását különböző akár azonos típusú - unsigned char # 038; char. Ebben az esetben azok azonosak char # 038; CHAR, mert typedef nem hoz létre a típus, de csak ad neki egy másik nevet. Ezek azonosak a kifejezéseket az 1. és 2-1, a fordító kiértékeli kifejezést, és helyette egy január 02-01.
Ez azt jelenti, hogy nem tudjuk használni az elkülönített összeállításához sablonok további problémák:

Általában a szabványos C ++ erre a kulcsszó export. Azonban ez a funkció túl nehéz teljesíteni, és hiányzik a legtöbb fordító. Vannak fordítók, amelyek támogatják, de azt tanácsolom, hogy ne használja a hordozható kódot.
Ezen kívül vannak olyan osztályok és funkció sablonok:

Ha a fordító lehet következtetni, hogy milyen típusú a sablon típusú paramétert paraméterek - fogja megtenni, így nem kell, hogy adja meg azt a kódot. Ha nem, akkor meg tudjuk határozni a funkció a felbontás:

Nem vállal semmilyen fölött.

Szakterület - egy új szintre


Jellemzően a sablonok akarunk írni egy általános kódot, de bizonyos esetekben már romlik a teljesítménye. A probléma megoldására létezik egy speciális varázslat - specializáció Chalon. Szakterület - ez újbóli meghatározását mintát egy speciális típusát vagy típusait osztályban.

A fordító fogja kiválasztani a legmegfelelőbb szakosodás pontosan ebben a példában egy osztály típusú „mutató típus.”

Sinister magic: rekurzió

Szakterület és az a tény, hogy tudjuk használni a Sablonok ad a hölgyek egy nagyon érdekes lehetőség - rekurzív fordításkor.

A legegyszerűbb és leggyakoribb példa - a számítás egy sorozat vagy polinom, például az összege egy számtani sorozat:

Nézd ... Ez működik! Cool? Növekszik az iterációk számát 500:

Most összeállítása hosszabb időt vesz igénybe, a program ideje - folyamatos! Csodák!

Ne csináld, mint egy kecske, ha a vihar

Van egy pár pillanatig.

A maximális mélysége rekurzió korlátozódik alapértelmezett megvalósítása az új gcc 900, a régebbi kevésbé. paraméter

megszünteti ezt a korlátozást.
A második figyelmeztetés - nem várja meg a hibajelentést. Változás a progresszió a faktoriális:

Szerezze hibás eredményeket, és figyelmeztetés nélkül ...
A harmadik pont egyértelmű: mi is létrehozhatunk túlságosan közel azonos sablont példányosítását és helyette kap a teljesítmény növelése bináris nyereséget.

Erőteljes varázslatok ősi

Lehetséges, hogy összekapcsolják a varázslatos öröklés a sablon mágia?

Az ősi felhasználása a varázslat CRTP. Az ötlet egyszerű: ne használja a virtuális öröklés, és polimorf viselkedése révén explicit típus örököse a szülő típus. Nézzünk egy példát a használat.

Mi öröklődnek inline módszerek polimorf viselkedést! Ki fogja azt mondani, hogy ez nem jó - az ellenségem örökre.
A régiek is tanácsos hozzá kell adni a szülő konstruktor valami ilyesmi:

démonok, ébredt egy nagy varázslat, nem általa okozott kárt a mágus.

Sok titkos technikák, ősi és nem túl sok. Remélem, hogy nem, hogy hamarosan találkozunk / * * pokol / és igen érkezik majd az erőt a régi.

Kapcsolódó cikkek