derleme zamanında dizi boyutu

C’nin meşhur işlevsel makrosunu bilmeyen var mı?

Ama C++ dilinde işlevsel makroları istemiyoruz, değil mi? C++ 11 ile gelen constexpr işlevler dizi boyutunun derleme zamanında elde edilmesi için mükemmel bir çözüm sunuyor:
asize bir işlev şablonu. Şablonumuzun iki parametresi var. Birinci şablon parametresi olan T bir türe, ikinci şablon parametresi olan n ise size_t türünden bir sabite bağlanmış. Şablonun parametre değişkeni T türünden n öğeli bir diziye referans. İşlev şablonunda constexpr anahtar sözcüğü kullanılıyor. Eğer işlevin parametresi bir referans olmasaydı bu işlev bir dizi ismi ile çağrıldığında dizi ismi dizinin ilk öğesinin adresine dönüştürülecekti. Ancak işlev parametresi r, bir referans olduğundan derleyici r ismini T türünden n öğeli bir diziye referans olarak ele alacak. Böylece derleyici derleme zamanında hem T türünün hem de şablon sabit parametresi olan n değerinin çıkarımını yapacak. constexpr  işlevden elde edilen geri dönüş değeri bir sabit ifadesi (constant expression) olarak kullanılabilecek:

Necati Ergin

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

Bunlar da ilginizi çekebilir

derleme zamanında dizi boyutu” için bir yorum

  1. Necati bey selamlar

    3. bir yol olarak C++11 öncesi için constexpr kullanmadan

    template <typename T, size_t N> char(&asizeofh(T(&)[N]))[N];
    #define asizeof(x) (sizeof(asizeofh(x)))

    yapabilir miyiz?

Bir Cevap Yazın

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

Kod Eklemek İçin Okuyun