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

Спеціалізація шаблону — одна із можливостей шаблонів у 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.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.