Урок №184. Параметр non-type в шаблоні

  Юрій  | 

  Оновл. 25 Бер 2021  | 

 140

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

Параметр non-type

Параметр non-type в шаблоні — це спеціальний параметр шаблону, який замінюється не типом даних, а конкретним значенням. Цим значенням може бути:

   цілочисельне значення або перерахування;

   вказівник або посилання на об’єкт класу;

   вказівник або посилання на функцію;

   вказівник або посилання на метод класу;

   std::nullptr_t.

У наступному прикладі ми створимо шаблон класу StaticArray, який використовує як параметр типу, так і параметр non-type. Параметр типу відповідає за тип даних елементів статичного масиву, а параметр non-type відповідає за розмір виділеного масиву:

Результат виконання програми:

9 8 7 6 5 4 3 2 1 0
5.5 5.6 5.7 5.8 5.9

Нам навіть не довелося динамічно виділяти змінну-член m_array! Це пов’язано з тим, що для будь-якого створеного об’єкта класу StaticArray його розмір є конкретно заданим значенням (можна сказати константою), яке передає користувач. Наприклад, якщо ми створимо екземпляр StaticArray<int, 10>, то компілятор замінить змінну розміру масиву (size) на 10. Таким чином, ми отримаємо m_array типу int[10], який можна виділити статичним чином.

Цю особливість використовує вже відомий нам клас зі Стандартної бібліотеки С++ — std::array. Коли ми виділяємо std::array<int, 5>, то int є параметром типу, а 5 — параметром non-type в шаблоні класу!

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (2 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *