ПредишенСледващото

В този план, има и други приложения, вижте. Шаблон.
Шаблони (английски шаблон.) - означава ++ езика C. генерализирана за кодиране алгоритми. без позоваване на определени параметри (например типове данни. размер буфер, стойности по подразбиране).

След това, за първи модел, пишем: SomeClass <20, int> someVariable; за втория: SomeClass <30, double> SomeVariable2;

Въпреки шаблони съдържат бърза парче форма за въвеждане на кода, в действителност, тяхната употреба не намалява изпълнимия код, тъй като всеки набор от параметри, компилаторът създава отделен екземпляр на функцията или клас. В резултат на това, възможността за споделяне изчезва компилиран код в рамките на споделената библиотека.

функционални шаблони

Синтаксис описание шаблон

шаблон невалидни вид (масив [], размер Int T); // прототип: вид шаблон е обявена, но не е определена

шаблон // число параметър знак * чете ()

Пример за използване

Най-простият пример е определянето на минимум от двете стойности.

Ако е по-малко от б и след това се върнете, в противен случай - да се върне в б

При липса на шаблон програмист трябва да пиша отделни функции за всеки тип данни се използват. Въпреки че много програмни езици определят с вградени минимум функция за примитивни типове (като числа и реални числа), може да са необходими тази функция за комплекс (например, "време" или "ред") и много сложна ( "играч" в онлайн играта) обекти ,

Ето дефиницията на шаблона на минимума от:

шаблон Т минути (Т А, Т б)

можете просто да използвате името й да се обади на тази функция: мин (1, 2); минути ( "а", "б"); минути (низ ( "ABC"), низ ( "CDE"));

функция Call шаблон

Най-общо казано, за да извикате функцията шаблон, трябва да посочите стойности за всички параметри на шаблона. За да направите това, след като името на шаблона, който посочите списък с ценности в ъглови скоби:

Int и [5] = <5, 4, 3, 2, 1>; вид(I, 5);

овъгляване в [] = "bvgda"; вид(С, strlen (в));

вид(С, 5); // грешка: в нещо като параметър Int [], и не въглен []

знак * ReadString = четене<20>(); изтриване [] ReadString; ReadString = четат<30>(); За всеки набор от параметри, компилаторът генерира нов случай на функция. Процесът на създаване на нова инстанция на инстанция се нарича шаблон.

В горния пример, компилаторът създаде един вид функция специализация две шаблон (за видове CHAR и междинно съединение) и две специалности четат шаблон (за BufferSize 20 и 30 стойности). Последното е вероятно да разточителство, тъй като за всяка възможна стойност на параметъра компилаторът ще създаде повече и повече случаи на функции, които се различават само по един-единствен постоянен.

Извеждане стойности на параметрите

В някои случаи, компилаторът може да се въвеждат (логично определи) функцията стойността на функцията на шаблон параметър аргумент. Например, когато извикване на функция по-горе вид, евентуално зададени шаблон параметър (ако той съвпада с елементи масив тип аргумент):

Int и [5] = <5, 4, 3, 2, 1>; сортиране (I, 5); // нарича сортиране

овъгляване в [] = "bvgda"; вид (с, strlen (в)); // нарича сортиране Отклоняване е възможно, и по-сложни случаи.

В случай на използване на шаблони класове с целочислени параметри също е възможно премахването на тези параметри. Например:

шаблон клас IntegerArray

шаблон Prototype // шаблон невалидни PrintArray (IntegerArray масив) // шаблон повикване

// Използване IntegerArray шаблон обект<20> IA; PrintArray (IA);

Правила екскреция въведен в езика, за да се улесни използването на шаблона и да се избегнат потенциални грешки, като например опит за използване на сортиране Сортиране на масив от знаци.

Ако параметърът шаблон могат да бъдат получени в няколко аргумента, резултатът трябва да бъде клирънс са еднакви за всички тези аргументи. Например, следните две процедури са погрешни:

мин (0, 'а'); мин (7, 7.0);

Грешки в шаблони

Някои грешки в описанието на модела могат да бъдат открити вече на място описания. Тези грешки не зависят от конкретни параметри. Например:

шаблон невалидни е (Т данни)

Грешки, свързани с използването на специфични параметри шаблон, не могат да бъдат открити преди шаблона използва. Например, мин самата шаблон не съдържа грешки, но използването на това с типовете, за които работата "<' не определена, приведёт к ошибке:

А структура

А obj1, obj2; минути (obj1, obj2);

Ако въведете операция "<' до первого использования шаблона, то ошибка будет устранена. Так проявляется гибкость шаблонов в C++.

приятел инлайн булев оператор<( const A& a1, const A& a2 )

минути (obj1, obj2);

шаблонни класове

В един клас, който реализира свързан списък от цели числа, добавяне на нови алгоритми за елемента от списък, да търсите желаната опция не зависи от факта, че в списъка на елементи - числа. Аналогично се прилага и списък на герои, низове, дати, класове на играчи, и така нататък.

шаблон Списък клас

Използване на шаблони

За да използвате клас шаблон, трябва да се определят неговите параметри:

списък Li; списък LS; li.Add (17); ls.Add ( "Hello!");

технически

Настройки на шаблон

Шаблон параметри могат да бъдат: параметрите на типа, параметрите на конвенционалните видове, настройки на шаблони.

Можете да зададете стойности за параметрите на всеки вид.

шаблон

Настройки на шаблони

Ако класът на шаблон или функция трябва да използват един и същ шаблон, но с различни параметри, параметрите на шаблона използват. Например:

Не можете да използвате функцията шаблони като параметри на шаблони.

Правила деривация аргументи на функция на шаблона

За параметри, които са видове (например параметър функция T вид) по избор отстраняване, ако функция аргумент е един от следните видове:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!