C++
Template uzmanlaşma
Template specialization ile belirli tür için özelleştirme öğrenirsin.
Template specialization
Bazen bir şablon, belirli bir tür için farklı davranmalıdır. Template specialization (özelleştirme) bunu sağlar. template <> struct Vector<bool> { ... }; bildirimi, bool türü için özelleştirilmiş bir sürümdür.
template <> içinde boş açılı parantez, kalan tür parametresi olmadığını belirtir; bu tam özelleştirmedir (full specialization). Genel şablon template <typename T> struct Vector olduğu gibi kalır; bool için özelleştirme onun yerini alır. Vector<int> genel şablonu, Vector<bool> özelleştirmeyi kullanır.
Neden özelleştirme?
Bir bool vektörü, 8 bool'u 1 bayta paketleyebilir. Genel şablon bunu yapamaz; her bool için 1 bayt ayrılırdı. Özelleştirme, belirli türler için eniyilenmiş sürüm sağlar.
Tam özelleştirme template <> ile yapılır. Kısmı özelleştirme (partial specialization) ise bazı parametreleri sabit bırakır: template <typename U> struct Vector<U*> işaretçi türleri içindir. Bu derste yalnızca tam özelleştirmeyi işliyoruz. Özelleştirme, performans veya bellek kazancı gerektiğinde kullanılır.
Uygulama Vector<bool> özelleştirmesi yaz
Önce genel şablonu yaz: template <typename T> struct Vector { T data; };. Sonra bool için özelleştirme: template <> struct Vector<bool> { static const int bits = 8; };. main içinde std::cout << Vector<bool>::bits << std::endl; yaz.
Örnek çözümü göster
#include <iostream>
template <typename T>
struct Vector {
T data;
};
template <>
struct Vector<bool> {
static const int bits = 8;
};
int main() {
std::cout << Vector<bool>::bits << std::endl;
return 0;
}
Kendini test et
-
Kavramı eşle
- template <>
- Tam özelleştirme
- Vector<bool>
- Bool için özel
- template <typename T>
- Genel şablon
- Vector<int>
- Genel kullanım
-
Özelleştirme bildirimini tamamla
template <> struct Vector<____> { static const int bits = 8; };
Cevabı göster
template <> struct Vector<bool> { static const int bits = 8; };
-
Ne zaman template specialization kullanılır?
// Belirli tür için özel davranış
- Belirli tür için özel davranış gerektiğinde
- Asla
- Her zaman
- Yalnızca hata ayıklarken
Cevabı göster
Belirli tür için özel davranış gerektiğinde — Özelleştirme, belirli tür için özel davranış gerektiğinde kullanılır.
Sıradaki ders: Özet - Şablon temelleri