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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Спеціалізація шаблону — одна із можливостей шаблонів у C++. Вона дозволяє задавати альтернативні реалізації шаблону, коли значення параметрів шаблону є певними наперед заданими типами.

Спеціалізація шаблону зазвичай використовується для:

  • оптимізації — спеціалізована версія шаблону матиме оптимальніший код за рахунок знання особливостей типу;
  • спрощення коду — винесення часткових випадків у окремі реалізації спростить код (подібно до використання патерну проектування стратегія).

Приклади

[ред. | ред. код]
  • Реалізація функції sort() залежить від численних обмінів елементів значеннями. Якщо операція обміну значеннями є швидкою, як для атомарних типів чи вказівників, то її можна використовувати безпосередньо. Якщо ж вона є повільною, тоді потрібно створити для кожного елемента вказівник і здійснювати обмін значеннями серед вказівників.
  • Стандартним прикладом спеціалізації шаблону є vector<bool> — спеціалізація шаблона послідовного контейнера бібліотеки STL, яка використовує однобітне зберігання значень типу bool.

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

[ред. | ред. код]

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

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

Література

[ред. | ред. код]
  • Alexandrescu, Andrei (1 лютого 2001). Modern C++ Design. Addison Wesley. с. 23. ISBN 0-201-70431-5.
  • Vandevoorde, David; Josuttis, Nicolai M. (2003). C++ Templates: The complete Guide. Addison-Wesley. ISBN 0-201-73484-2.