Шаблон (програмиране) е
Шаблони (англ. шаблон ) - инструмент за език C ++, предназначен за кодиране на общи алгоритми, без обвързване с някои параметри (например типове данни, размери на буфера, стойности по подразбиране).
В C ++ е възможно да се създават шаблони за функции и класове.
Шаблоните ви позволяват да създавате параметризирани класове и функции. Например, ние се нуждаем от някакъв клас:
След това за първия модел пишем:
Въпреки че шаблоните предоставят кратка форма за писане на парче код, всъщност тяхното използване не съкращава изпълнимия код, тъй като за всеки набор от параметри компилаторът създава отделен екземпляр на функция или клас.
Съдържание
Синтаксис на описанието на шаблона
Ключовата дума typename е сравнително нова, така че стандартът позволява да се използва клас вместо typename:
Вместо т разрешен е всеки друг идентификатор.
Пример за употреба
Най-простият пример е дефиницията на минимума от две величини.
Ако a е по-малко от b, върнете a, в противен случай - върнете b
При липса на шаблони програмистът трябва да напише отделни функции за всеки използван тип данни. Въпреки че много езици за програмиране определят вградена минимална функция за елементарни типове (като цели числа и реални числа), такава функция може да е необходима за сложни (например "време" или "низ") и много сложни (" играч "в онлайн игра) обекти.
Това е шаблонът за функцията за определяне на минимума:
За да извикате тази функция, можете просто да използвате нейното име:
Извикване на функция за шаблон
Най-общо казано, за да извикате функция за шаблон, трябва да предоставите стойности за всички параметри на шаблона. За да направите това, след името на шаблона в ъглови скоби е посочен списък със стойности:
За всеки набор от параметри компилаторът генерира нов екземпляр на функцията. Процесът на създаване на нов екземпляр се нарича инстанциране на шаблон.
В горния пример компилаторът е създал две специализации на шаблона на функцията за сортиране (за char и int) и две за шаблона за четене (за стойности 20 и 30 на BufferSize). Последното е най-вероятно разточително, тъй като за всяка възможна стойност на параметъра компилаторът ще създава нови и нови копия на функции, които ще се различават само с една константа.
Извеждане на стойности на параметри
В някои случаи компилаторът може сам да изведе (логически да определи) стойността на параметъра на шаблона на функцията от аргумента на функцията. Например, когато извиквате функцията за сортиране по-горе, не е необходимо да указвате параметър на шаблон (ако е същият като типа на елемента на аргумента на масива):
В случай на използване на шаблони на класове с целочислени параметри, също е възможно да се изведат тези параметри. Например:
Правила за извод са въведени в езика, за да улеснят използването на шаблона и да избегнат възможни грешки, като например опит за използване на сортиране за сортиране на масив от символи.
Ако параметърът на шаблон може да бъде изведен от няколко аргумента, резултатът от приспадането трябва да бъде абсолютно еднакъв за всички тези аргументи. Например следните повиквания са дефектни:
Грешки в шаблони
Някои грешки в описанието на шаблона могат да бъдат открити на мястото на описанието. Тези грешки са независими от конкретни параметри. Например:
Грешки, свързани с използването на конкретни параметри на шаблона, не могат да бъдат открити, преди шаблонът да бъде използван. Например самият модел min е без грешки, но използването му с типове, за които операторът 'не е дефиниран, ще доведе до грешка:
Ако въведете операцията „преди първата употреба на шаблона, тогава грешката ще бъде премахната. Ето как се проявява гъвкавостта на шаблоните в C ++:
В клас, който реализира свързан списък с цели числа, алгоритмите за добавяне на нов елемент към списъка и намиране на желания елемент не зависят от факта, че елементите от списъка са цели числа. Същите алгоритми биха били приложими за списък с символи, низове, дати, класове на играчи и т.н.