using ile eş isim şablonları (alias template) bildirimleri

C++11 öncesinde bir türe eş isim (type alias) oluşturmanın tek yolu C’den gelen typedef bildirimleriydi:

C++11 standartları ile türlere eş isim oluşturmak için ikinci bir araç daha geldi. Artık eş isim bildirimlerini using anahtar sözcüğü ile yapabiliyoruz. Sentaks çok basit: using anahtar sözcüğünü seçilen eş isim izliyor ve = atomundan sonra ise eş ismin hangi türe karşılık geldiği yazılıyor. Yukarıdaki typedef bildirimleri yerine using bildirimleri yazalım:

Ancak eş isim bildirimleri konusunda yeni bir aracın daha dile eklenmesinin ana nedeni, daha önce typedef bildirimleriyle mümkün olmayan eş isim şablonlarının (alias templates) oluşturabilmesini mümkün kılmak:

Yukarıdaki kodda Allocator olarak kullanılacak Alloc isimli bir sınıf tanımlanıyor. Daha sonra Vec isimli bir eş isim şablonu oluşturuluyor. Böylece kod içinde vector sınıf şablonunda ikinci şablon tür parametresi olarak Alloc sınıf şablonunun kullanılması durumunda, şablon tür argümanı olarak Alloc sınıfını belirtmeye gerek kalmayacak. Örneğin

yazmak yerine, yalnızca

yazılabilecek. Birkaç örnek daha verelim:

Yukarıdaki kodda oluşturulan Smap eş isim şablonunun tür parametresi, standart map sınıfının ikinci şablon tür parametresini belirleyecek. Birinci şablon tür parametresi standart string sınıfı olacak. Bu durumda

yazmak ile

yazmak aynı anlama gelecek. Şimdi de aşağıdaki koda bakalım:

Yukarıdaki kodda p double türden bir nesneyi gösteren bir pointer değişken.

Eş isim şablonları da varsayılan tür argümanı alabilir:

Yukarıdaki kodda tanımlanan myset değişkeni

türünden.

Şablon sabit parametreleri de (non type parameters) eş isim şablonlarında kullanılabilir:

Yukarıdaki kodda, Irand şablon ismi 100 argüman değeri ile kullanıldığında bu şablon açılımı

açılımı anlamına geliyor.

Sınıf şablonlarında ya da işlev şablonlarında yapılabilen açık özelleştirme (explicit specialization) ya da yalnızca sınıf şablonlarında mümkün olan kısmi özelleştirme (partial specialization) araçları eş isim şablonlarında kullanılamıyor. Eş isim şablonlarında tür çıkarımı da söz konusu değil.
Eş isim şablonları isim alanı kapsamında (namespace scope) ya da sınıf kapsamında (class scope) bildirilebiliyor. Ancak sınıf şablonlarında ve işlev şablonlarında olduğu gibi isim alanı şablonlarının da yerel bir blok içinde bildirilmesi geçerli değil.

 

Share

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Kod Eklemek İçin Okuyun