A sablonok mire vannak mire találták ki őket? Egy hete próbálom megérteni a c++ nak a sablonok nyelvi részét de nem megy.
Röviden és tömören:
Egy sablon és egy vagy több típus egy típust hoz létre.
Például az STD-ben egy sablon a vector típus, ami egyébként egy bizonyos szabályoknak megfelelő rendezett halmaz tárolására használható. A halmaznak csak egyféle típusú eleme lehet, és ezt a sablonhoz megadott típussal tudod kiválasztani. Például a vector <int> Egész számokat tartalmazó vektor, a vector <string> pedig karakterláncokat. Bármilyen típust használhatsz vectorral. (Akár más vectorokat is, mert a sablonhoz megadott típus is lehet sablonnal készített típus).
Ha egy saját típust vagy függvényt készítesz, megteheted azt, hogy sablonokkal valósítod meg, ebben az esetben a fordítóprogram a sablon összes felhasználásánál elkészíti a típust úgy, hogy a megvalósításban az éppen kiválasztott típust használhatja. Ahhoz, hogy egyértelműen meghatározhass sablonon belüli kódot, ahhoz választhatsz egy álnevet a típusoknak.
Tehát, ha pl. egy osztályt deklarálsz, használhatsz hozzá sablonokat. Úgy, hogy meghatározod, milyen álnéven szerepeljenek a típusok. Ha pl. a tipus1 és a tipus2 álnevek használatával deklarálod a dict osztályt, és a programodban valahol egy dict<string, int> típusú változót készítesz, akkor létrejön egy új típus a sablonod alapján, ahol tipus1 helyett string, tipus2 helyett int típus jelenik meg.
"Fordítsuk le" magyarra:
"template <class T> T min(T a, T b)"
"Hé, te fordító! Ezentúl ismerni fogsz egy függvényt, amit min-nek hívunk. Igen ám! De a paraméterei (a, b) és visszatérési értékének típusát még nem mondom meg előre (template), majd csak ott, ahol használom, addig viszont T-vel jelölöm, a függvény definíciójában. Láthatod, hogy a T bármi lehet, de az összes paraméter ugyanez a T-nek megfelelő típusú, csak úgy, mint a visszatérési érték.
"Tegyük hozzá, hogy ezek nem sablonfüggvények (amire utalna az írásod), hanem függvénysablonok. Tehát a template függvény nem egy létező függvény, csak egy minta, ami alapján tud függvényeket generálni a fordító."
Igaz, de gondoltam, ebbe már nem megyek bele. A felhasználási helyen végül is ugyanarra valók.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!