Шаблон (програмиране)

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

В C ++ е възможно да се създават шаблони за функции и класове.

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

След това за първия модел пишем:

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

Съдържание

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

Ключовата дума typename е сравнително нова, така че стандартът позволява да се използва клас вместо typename:

Вместо т разрешен е всеки друг идентификатор.

Пример за употреба

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

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

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

Това е шаблонът за функцията за определяне на минимума:

За да извикате тази функция, можете просто да използвате нейното име:

Извикване на функция за шаблон

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

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

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

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

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

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

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

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

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

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

Грешки, свързани с използването на конкретни параметри на шаблона, не могат да бъдат открити, преди шаблонът да бъде използван. Например самият модел min е без грешки, но използването му с типове, за които операторът 'не е дефиниран, ще доведе до грешка:

Ако въведете операцията „преди първата употреба на шаблона, тогава грешката ще бъде премахната. Ето как се проявява гъвкавостта на шаблоните в C ++:

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

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

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

Параметри на шаблона

Параметрите на шаблона могат да бъдат: параметри на типа, параметри на нормален тип, параметри на шаблона.

За параметри от всякакъв тип можете да посочите стойности по подразбиране.

Параметри на шаблона

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

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

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

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

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

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

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

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

Типове като членове на класове

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

Шаблони като членове на класа

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

Езикът на Ада има механизми, подобни на моделите.

D има шаблони, които понякога са по-мощни от C++.

  • Дизайнерски модели
  • C ++ - вижте шаблон.
  • C #, вижте общ.
  • Генерализирано програмиране
  • Метапрограмиране
  • C ++ 0x е нов стандарт на C ++ със значително разширяване на възможностите на шаблона

Литература

  • Дейвид Вандеворде, Николай М. Жозатис C ++ шаблони: Пълното ръководство. - М.: "Уилямс", 2003. - С. 544. - ISBN 0-201-73484-2

Фондация Уикимедия. 2010 г. .

Вижте какво е „Шаблон (програмиране)“ в други речници:

Модел на делегиране - Шаблон за делегиране на шаблони Делегиране на шаблон, описан в Дизайна на модели Не При разработването на софтуер, шаблонът на делегиране е начин, по който обектът външно изразява някакво поведение, но в ... ... Wikipedia

Прокси модел (шаблон за дизайн) - Прокси модел (Прокси) Шаблон за дизайн. Предоставя обект за контрол на достъпа чрез прихващане на всички повиквания към него. Съдържание 1 Цел 1.1 Задача 1.2 Решение 2 Плюсове 3 ... Уикипедия

Прокси шаблон - (заместник) модел на проектиране. Предоставя обект за контрол на достъпа чрез прихващане на всички повиквания към него. Съдържание 1 Цел 1.1 Задача 1.2 Решение 2 Плюсове 3 ... Уикипедия

Програмиране на ограничения - Програмиране на парадигми Ориентирана към агента Компонентно ориентирана конкатенативна декларация (контрастира с императивна) Ограничения Функционален поток от данни Ориентирана към таблица (електронни таблици) Реактивна ... Уикипедия

Шаблон - За шаблони в Wikipedia вижте страницата на Wikipedia: Шаблони. Шаблон в техниката на плоча (шаблон, шаблон и др.) С изрези, по контура на които са направени чертежи или продукти, или инструмент за измерване на размерите. Шаблон в ... ... Уикипедия

Дизайн модел - Този термин има други значения, виж Образец. При разработването на софтуер моделът на дизайна е повторяема архитектурна конструкция, която представлява решение на проблем ... ... Уикипедия

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

Програмиране, базирано на прототип - Прототипното програмиране е стил на обектно-ориентирано програмиране, при което няма концепция за клас, а повторното използване (наследяване) се извършва чрез клониране на съществуващ екземпляр на прототип на обект ... ... ... Wikipedia

Заместник (модел на проектиране) - Прокси модел (Прокси) Шаблон за дизайн. Предоставя обект за контрол на достъпа чрез прихващане на всички повиквания към него. Съдържание 1 Цел 1.1 Задача 1.2 Решение 2 Плюсове 3 ... Уикипедия

Програмиране, управлявано от събития - Програмиране на парадигми Ориентирана към агента Компонентно ориентирана конкатенативна декларация (контрастира с императивна) Ограничения Функционален поток от данни Ориентирана към таблица (електронни таблици) Реактивна ... Уикипедия