Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Overview | Спеціалізація шаблонів
Шаблони C++

Overview

Свайпніть щоб показати меню

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

Створення шаблонів

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

template.h

template.h

12
template<typename> void SimpleTemplate() {}

Шаблони та параметри

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

single_parameter.h

single_parameter.h

multiple_parameters.h

multiple_parameters.h

12
template<typename T> void SimpleTemplate(T value) {}

Шаблони класів

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

class_template.h

class_template.h

1234567
template<typename T> class ClassTemplate { private: T value; public: ClassTemplate(T value) : value(value) {} };

Спеціалізація шаблонів

Спеціалізація шаблонів дозволяє створювати конкретні реалізації шаблону для певних типів даних. Це корисно, коли загальної реалізації недостатньо або потрібна особлива поведінка. Наступний приклад демонструє, як спеціалізувати шаблон функції для різних типів даних, включаючи int, bool та std::string:

specialization.h

specialization.h

1234567891011
template <typename T> void Template(const T& value) { /* ... */ } // Any Type template <> void Template<int>(const T& value) { /* ... */ } // For `int` template <> void Template<bool>(const T& value) { /* ... */ } // For `bool` template <> void Template<std::string>(const T& value) { /* ... */ } // For `std::string`
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 5
some-alt