переваги шаблонів

Шаблони можна використовувати для вирішення наступних завдань.

Створення тіпобезопасного класу колекцій (наприклад, стека), який може працювати з даними будь-якого типу.

Додавання додаткового типу, котрий перевіряє функції, які в іншому випадку брали б покажчики void.

Інкапсуляція груп перевизначень операторів з метою зміни поведінки типу (інтелектуальних покажчиків).

Більшість цих варіантів використання можна реалізувати без шаблонів, проте використання шаблонів забезпечує кілька переваг.

Шаблони простіше написати. Створюється тільки одна універсальна версія класу або функції замість створення спеціалізацій вручну.

Шаблони простіше зрозуміти, оскільки вони надають простий і зрозумілий спосіб абстрактного подання відомостей про типи.

Шаблони є тіпобезопаснимі. Оскільки типи, щодо яких виконують дії шаблони, відомі під час компіляції, компілятор може виконати перевірку типу до того, як станеться помилка.

Додаткові відомості див. У наступних розділах:

Нижче перераховані деякі проблеми при роботі з макросом.

Для компілятора немає способу перевірити, що параметри макросу - сумісні типи. Макрос розширюється без будь-яких спеціальних перевірок типу.

Параметри i і j оцінюються двічі. Наприклад, якщо який-небудь з параметрів має Постфіксний змінну збільшення, прирощення виконується два рази.

Оскільки макроси розширюються препроцесором, повідомлення про помилку компілятора будуть ставитися до розширеного макросу, а не самому визначенню макросу. Крім того, макрос буде відображатися в розширеній формі під час налагодження.

Безліч функцій, які зараз реалізовані з використанням порожніх покажчиків, можна реалізувати за допомогою шаблонів. Порожні покажчики часто використовуються, щоб дозволити функцій виконувати операції з даними невідомого типу. При використанні порожніх покажчиків компілятор не може розрізняти типи і, отже, виконувати перевірку типів або реалізовувати специфічне поведінка для будь-яких типів, наприклад використовувати оператори конкретних типів, перевантаження операторів, конструктори або деструктори.

Працюючи з шаблонами, можна створити функції і класи, що працюють з типізований даними. У визначенні шаблону тип виглядає абстраговані. Однак під час компіляції компілятор створює окрему версію функції для кожного зазначеного типу. Це дозволяє компілятору обробляти шаблони класів і функцій, як якщо б вони виконували операції з конкретними типами. Використання шаблонів також дозволяє підвищити ясність коду, оскільки не потрібно створювати спеціальні варіанти використання для складних типів, таких як структури.

C ++ дозволяє створювати класи інтелектуальних покажчиків, які включають покажчики і скасовують оператори покажчиків з метою додавання нових функцій в операції з покажчиками. Шаблони дозволяють створювати універсальні програми-оболонки для включення покажчиків практично будь-якого типу.

У наступному коді показаний простий збирач сміття лічильника посилань. Клас шаблону Ptr реалізує покажчик збору сміття на будь-який клас, похідний від RefCount.

Класи RefCount і Ptr забезпечують просте рішення збірки сміття для будь-якого класу, який може дозволити успадкування навантаження по екземплярам int від RefCount. Зверніть увагу, що основною перевагою використання параметричного класу, наприклад Ptr. замість більш універсального класу, наприклад Ptr. є повна тіпобезопасность першого. Попередній код гарантує, що Ptr можна використовувати майже в будь-якому місці, де використовується T *; навпаки, універсальний клас Ptr надав би тільки неявні перетворення в void *.

Наприклад, розглянемо клас, який використовується для створення та обробки отриманих в процесі збору сміття файли, знаки, рядки і так далі. З шаблону класу Ptr компілятор створює класи шаблонів Ptr. Ptr. Ptr і так далі і їх функції-члени: Ptr::

Ptr (). Ptr:: operator File * (). Ptr::

Ptr (). Ptr:: operator String * () і так далі.

Шаблони - це зручний спосіб реалізації класів колекцій.

Колекція MyStack є простою реалізацією стека. Два параметра шаблонів, T і i. задають тип елементів в стеку і максимальне число таких елементів в стеку. Функції-члени push і pop додають і видаляють елементи в стеку. Стек зростає в напрямку знизу.

Показ: успадкувала Захищений

Чи була ця сторінка корисною? Та ні

1500 символів Якого залишилося

Дякуємо! Дякуємо за відгук. Ваша думка дуже важлива для нас.

центри розробки

Спільнота

Зв'яжіться з нами

Схожі статті