CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

main.cpp
#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

main.cpp
#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

Soru
template <> struct Vector<____> { static const int bits = 8; };
Cevap
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?

main.cpp
// 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.

Orta seviye bölümündeki tüm dersler