Template uzmanlaşma
- C++ kursu
- Orta seviye
- Ders 51/116
- 5 dk
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.
Başlangıç kodu
#include <iostream>
// genel Vector<T> şablonunu yaz
// Vector<bool> özelleştirmesini yaz: bits sabiti 8 olsun
int main() {
// bits sabitini yazdır
return 0;
}Örnek çözüm
#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;
}Beklenen çıktı
8
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kavramı eşle
| Kavram | Anlamı |
|---|---|
template <> |
Tam özelleştirme |
Vector<bool> |
Bool için özel |
template <typename T> |
Genel şablon |
Vector<int> |
Genel kullanım |
2 Özelleştirme bildirimini tamamla
template <> struct Vector<____> { static const int bits = 8; };
template <> struct Vector<bool> { static const int bits = 8; };
Açıklama: Vector<bool> özelleştirmesi bool için yazılır.
3 Ne zaman template specialization kullanılır?
// Belirli tür için özel davranış- Belirli tür için özel davranış gerektiğinde Doğru cevap
- Asla
- Her zaman
- Yalnızca hata ayıklarken
Açıklama: Özelleştirme, belirli tür için özel davranış gerektiğinde kullanılır.