Цей термін має також інші значення див. Шаблон.
Шаблони (англ. Template) - засіб мови C ++. призначене для кодування узагальнених алгоритмів. без прив'язки до деяких параметрів (наприклад, типам даних. розмірами буферів, значенням за замовчуванням).
Тоді для першої моделі пишемо: для другої:
Хоча шаблони надають коротку форму запису ділянки коду, насправді їх використання не скорочує виконуваний код, так як для кожного набору параметрів компілятор створює окремий екземпляр функції або класу. Як наслідок, зникає можливість спільного використання скомпільованої коду в рамках поділюваних бібліотек.
шаблони функцій
Синтаксис опису шаблону
template Найпростішим прикладом служить визначення мінімуму з двох величин. Якщо a менше b то повернути а, інакше - повернути b За відсутності шаблонів програмісту доводиться писати окремі функції для кожного використовуваного типу даних. Хоча багато мов програмування визначають вбудовану функцію мінімуму для елементарних типів (таких як цілі і речові числа), така функція може знадобитися і для складних (наприклад «час» або «рядок») і дуже складних ( «гравець» в онлайн-грі) об'єктів . Так виглядає шаблон функції визначення мінімуму: Для кожного набору параметрів компілятор генерує новий екземпляр функції. Процес створення нового екземпляра називається інстанцірованія шаблону. В наведеному вище прикладі компілятор створив дві спеціалізації шаблону функції sort (для типів char і int) і дві спеціалізації шаблону read (для значень BufferSize 20 і 30). Останнє швидше за все марнотратно, так як для кожного можливого значення параметра компілятор буде створювати нові і нові екземпляри функцій, які будуть відрізнятися лише однієї константою. У деяких випадках компілятор може сам вивести (логічно визначити) значення параметра шаблона функції з аргументу функції. Наприклад, при виклику вищеописаної функції sort необов'язково вказувати параметр шаблону (якщо він збігається з типом елементів аргументу-масиву): char c [] = "бвгда"; sort (c, strlen (c)); // викликається sort У разі використання шаблонів класів з цілими параметрами також можливо виведення цих параметрів. наприклад: // Використання об'єкта шаблону IntegerArray<20> ia; PrintArray (ia); Правила виведення введені в мову для полегшення використання шаблону і для уникнення можливих помилок, наприклад спроба використання sort Якщо параметр шаблону можна вивести за кількома аргументів, то результат виведення повинен бути в точності однаковий для всіх цих аргументів. Наприклад, такі виклики помилкові: Деякі помилки в описі шаблону можуть бути виявлені вже в місці опису. Ці помилки не залежать від конкретних параметрів. наприклад: Помилки, пов'язані з використанням конкретних параметрів шаблону, можна виявити до того, як шаблон використаний. Наприклад, шаблон min сам по собі не містить помилок, однак використання його з типами, для яких операція '<' не определена, приведёт к ошибке: Якщо ввести операцію '<' до первого использования шаблона, то ошибка будет устранена. Так проявляется гибкость шаблонов в C++. min (obj1, obj2); У класі, що реалізовує зв'язний список цілих чисел, алгоритми додавання нового елемента списку, пошуку потрібного елемента не залежать від того, що елементи списку - цілі числа. Ті ж алгоритми застосовувалися б і для списку символів, рядків, дат, класів гравців, і так далі. Для використання шаблону класу, необхідно вказати його параметри: Параметрами шаблонів можуть бути: параметри-типи, параметри звичайних типів, параметри-шаблони. Для параметрів будь-якого типу можна вказувати значення за замовчуванням. Якщо в шаблоні класу або функції необхідно використовувати один і той же шаблон, але з різними параметрами, то будуть використовуватися установки-шаблони. наприклад: Для параметрів, які є типами (наприклад параметр T функції sort) можливо виведення, якщо аргумент функції має один з наступних типів:приклад використання
Виведення значень параметрів
Помилки в шаблонах
шаблони класів
Використання шаблонів
Технічні подробиці
параметри шаблонів
Параметри-шаблони
Правила виведення аргументів шаблону функції
Схожі статті