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

Часткова спеціалізація шаблонів

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

Спеціалізація шаблону для шаблону з одним параметром є простою, але з кількома параметрами вона ускладнюється. У таких випадках використовується часткова спеціалізація шаблону. Вона дозволяє створювати спеціалізовану версію шаблону для певних підмножин типів або значень.

main.cpp

main.cpp

12345678
// What if `T1` and `T2` are the same type? // Or what if you want to define special behavior when `T1` is a `std::string`? template<typename T1, typename T2> void TemplateExample(T1 first, T2 second) { std::cout << "Generic template!" << std::endl; }

Синтаксис часткової спеціалізації шаблону

Часткову спеціалізацію шаблону можна розглядати як різновид перевантаження шаблону. Ось основні правила:

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

main.cpp

main.cpp

123456789101112131415
#include <iostream> // Primary template template<typename T1, typename T2> bool IsSameType(T1 first, T2 second) { return false; } // Partial specialization for when both types are the same template<typename T> bool IsSameType(T first, T second) { return true; } int main() { std::cout << IsSameType(10, 'a') << std::endl; std::cout << IsSameType("Hello", "World") << std::endl; }

Це один зі способів використання спеціалізації шаблонів, але існує й інший, більш поширений сценарій.

main.cpp

main.cpp

123456789101112131415
#include <iostream> // Primary template template <typename T1, typename T2> // General case void Template(T1 a, T2 b) { std::cout << "General" << std::endl; } // Partial specialization for when `T1` is `bool` template <typename T2> // Special case when the first type is `bool` void Template(bool a, T2 b) { std::cout << "Special" << std::endl; } int main() { Template(false, 25); Template(100, 300); }
question mark

Що таке часткова спеціалізація шаблонів?

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

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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