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

Introduction to Template Specialization

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

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

main.cpp

main.cpp

123456789101112
#include <iostream> template<typename T> T square(T value) { return value * value; } int main() { std::cout << square<int>(25); std::cout << square<std::string>("5"); }

Якщо запустити наведений вище код, виникне помилка. Це відбувається тому, що std::string не підтримує оператор *. Тому необхідно повідомити компілятор, як обробляти std::string, переданий як параметр.

Як працюють шаблони на низькому рівні

Зараз ви лише ознайомлюєтеся з основами шаблонів, зокрема з шаблонами функцій. Ви дізналися, як їх створювати, використовувати списки параметрів і викликати функції з різними типами даних. Можливо, ви замислювалися, чому в цьому випадку не перевантажити функції для всіх доступних числових типів у C++. Хоча цей підхід міг би спрацювати для даного прикладу, важливо пам’ятати, що шаблони — набагато потужніший інструмент.

main.cpp

main.cpp

12345678910111213
#include <iostream> struct myStruct {}; class myClass {}; template<typename T> void TemplateFunction() { std::cout << typeid(T).name() << std::endl; } int main() { TemplateFunction<myClass>(); TemplateFunction<myStruct>(); }

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

question mark

Чому шаблон функції square у прикладі викликає помилку при використанні std::string?

Виберіть правильну відповідь

Все було зрозуміло?

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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