Sablonok c

Ez a kifejezés más jelentéseket is tartalmaz, lásd Sablon.
Sablonok (angol sablon) a C ++ eszköz. Általános algoritmusok kódolására szolgál. bizonyos paraméterek (például adattípusok, puffer méretek, alapértelmezett értékek) megkötése nélkül.







Aztán az első modellhez írunk: SomeClass <20, int> someVariable; a második: SomeClass <30, double> SomeVariable2;

Bár sablonok egy gyors darab kód beviteli forma, sőt, ezek alkalmazása nem csökkenti a végrehajtható kódot, hiszen minden sor paramétert, a fordító létrehoz egy külön példányával függvény vagy osztály. Ennek következtében eltűnik a megosztott kódok megosztásának lehetősége a megosztott könyvtárak keretében.

Függvénysablonok

Sablon leírás szintaxisa

sablon void sort (T tömb [], int méret); // prototípus: mintafajta deklarált, de nem definiált

sablon // integer paraméter char * read ()

Példa a felhasználásra

A legegyszerűbb példa a legalább két mennyiség meghatározása.

Ha a kisebb, mint b, akkor térjen vissza, egyébként térjen vissza b

Sablonok hiányában a programozónak meg kell adnia az egyes adattípusokhoz külön funkciókat. Bár számos programozási nyelv meghatározza az elemi típusok (pl. Egész számok és valós számok) beépített minimális funkcióját, ez a funkció komplex (pl. "Idő" vagy "string") és nagyon összetett ("online játék játék" .

Tehát a minta meghatározásának funkciójának mintázata:

sablon T min (T a, T b)

Ennek a funkciónak a megadásához egyszerűen használhatja a nevét: perc (1, 2); min ('a', 'b'); min (string ("abc"), string ("cde"));

Sablon funkció hívása

Általánosságban elmondható, hogy egy sablonfunkciót meg kell hívnia, meg kell adnia az összes sablonparaméter értékét. Ehhez a sablonnév után a szögletes zárójelben lévő értékek listája jelenik meg:

int i [5] = <5, 4, 3, 2, 1>; fajta(i, 5);

char c [] = "bwda"; fajta(c, strlen (c));

fajta(c, 5); // hiba: rendezés paraméter int [], nem char []

char * ReadString = olvasás<20>(); törlés [] ReadString; ReadString = olvasás<30>(); Minden paramétercsoport esetében a fordító új függvényt generál a függvényben. Az új példány létrehozásának folyamata egy sablont instantiáló.

A fenti példában, a fordító létrehozott egyfajta függvény szakirányú két sablon (a CHAR és INT típusú) és a két szakterületek olvasni sablon (a buffersize 20 és 30 értékek). Ez utóbbi valószínűleg a pazarló, mivel minden lehetséges paraméter értékét a fordító több és több esetben a funkciók, amelyek csak egyetlen állandó.







A paraméterértékek származtatása

Bizonyos esetekben a fordító dedikálja (logikusan meghatározza) a függvénysablon paraméter értékét a függvény argumentumából. Például, amikor a fenti rendezési funkciót hívja, nem szükséges megadni egy sablon paramétert (ha megfelel az array argumentum elemeinek típusának):

int i [5] = <5, 4, 3, 2, 1>; sort (i, 5); // call sort

char c [] = "bwda"; sort (c, strlen (c)); // call sort Bonyolultabb esetekben kizárható.

Az egész paraméterekkel rendelkező osztály sablonok használata esetén ezek a paraméterek is származhatnak. Például:

sablon osztály IntegerArray

sablon // Prototípus sablon érvénytelen PrintArray (IntegerArray array) // Hívja a sablont

// Az IntegerArray sablon objektum használata<20> ia; PrintArray (ia);

A következtetési szabályok a nyelvben kerülnek bevezetésre a sablon használatának megkönnyítése és a lehetséges hibák elkerülése érdekében, például egyfajta rendezési kísérlet a karakterek sorrendjének rendezése.

Ha a sablon paraméter több argumentumon megjeleníthető, akkor a kimenetnek pontosan ugyanazoknak kell lennie ezekre az érvekre. Például a következő hívások nem megfelelőek:

min (0, 'a'); min (7, 7,0);

Sablonok hibái

A sablon leírásában szereplő hibák már a leírás helyén azonosíthatók. Ezek a hibák nem függenek bizonyos paraméterektől. Például:

sablon void f (T adat)

Az egyes sablonparaméterek használatával kapcsolatos hibákat a sablon használata előtt nem lehet észlelni. Például a min minta önmagában nem tartalmaz hibákat, hanem olyan típusokkal, amelyeknél a "<' не определена, приведёт к ошибке:

struktur A

A obj1, obj2; perc (obj1, obj2);

Ha beírja a műveletet "<' до первого использования шаблона, то ошибка будет устранена. Так проявляется гибкость шаблонов в C++.

barát inline bool operátor<( const A& a1, const A& a2 )

perc (obj1, obj2);

Osztály sablonok

Egy olyan osztályban, amely az egész számok koherens listáját valósítja meg, az új listaelemek hozzáadásával kapcsolatos algoritmusok a kívánt elem kereséséhez nem függenek attól, hogy a listaelemek egész számok. Ugyanazokat az algoritmusokat alkalmaznák a szimbólumok, karakterláncok, dátumok, játékosok osztályai stb. Listájára.

sablon osztálylistát

Sablonok használata

Az osztálysablon használatához meg kell adnia a paramétereit:

lista li; lista ls; li.Add (17); Add hozzá ("Hello!");

Technikai részletek

Sablonbeállítások

A sablonok paraméterei lehetnek: paramétertípusok, szokásos típus paraméterek, paraméter-sablonok.

Valamennyi típusú paraméter esetén meg lehet adni az alapértelmezett értékeket.

sablon

Sablon beállítások

Ha ugyanazt a sablont szeretné használni egy osztály vagy függvény sablonjába, de különböző paraméterekkel, akkor a sablonparamétereket használja. Például:

Sablon-paraméterekként nem használható a függvénysablonok.

Az argumentumokat függvénysablonhoz hozzárendelő szabályok

A típusok paraméterei (például a rendezési funkció T paramétere) kimenet akkor lehetséges, ha a függvény argumentum az alábbi típusok valamelyikével rendelkezik:




Kapcsolódó cikkek