bir işlev çağrısını yalnızca belirli bir türden argümanla sınırlamak

Bir işlevimiz var ve bu işlevin yalnızca belirli bir türden argümanla çağrılabilmesini güvence altına almak istiyoruz:

Amacımız yukarıdaki gibi bildirilen bir işlevin yalnızca int türden bir değerle çağrılabilmesini mümkün kılmak. Kodla tanımlanan türler (user defines types) da dahil olmak üzere int türü dışında işleve gönderilecek tüm argümanlar sentaks hatası oluşturmalı. Bu amacımızı şu şekilde gerçekleştirebiliriz:

Burada C++ dilinin şablonlara ilişkin önemli bir kuralından faydalanıyoruz: Bir işlev şablonuyla (function template) aynı isimli  bir işlev aynı bilinir alanında (scope) birlikte bulunabilir. Bu isimli işleve bir çağrı yapılması durumunda, eğer işleve gönderilen argüman gerçek işlevin parametresi türünden ise gerçek işlev çağrılır. (Bu durumda çift anlamlılık hatası oluşmaz). Eğer işleve gönderilen argüman gerçek işlevin parametresinin türünden değil ise bu durumda derleyici şablondan yeni bir işlev oluşturur.

Şimdi yukarıdaki bildirimlere yeniden bakalım: Eğer func işlevi int türden bir argüman ile çağrılırsa derleyici şablondan bir işlev oluşturmayacak. Çağrı gerçek işleve yapılmış olacak. Şimdi de işlevin örneğin double türden bir değerle çağrıldığını düşünelim:

Kod geçersiz. Derleyici işlev çağrısında kullanılana argüman olan ifadenin türünün double olmasından hareketle aşağıdaki gibi bir işlev bildirecek:

Söz konusu işlev de delete edilmiş olduğundan bu işleve yapılan çağrı sentaks hatası olarak değerlendirilecek. int türü dışında tüm argümanlar için durum aynı olacak.

Necati Ergin

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

Bunlar da ilginizi çekebilir

bir işlev çağrısını yalnızca belirli bir türden argümanla sınırlamak” için 2 yorum

  1. Selam Necati Bey
    Template fonksiyonlar için sadece int açılımı için delete olması için nasıl bir kod yazılmalıdır?

  2. Fahrettin bey,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun