CodeBlanks Logo Icon CodeBlanks

Type traits nedir?

Type traits ile tür bilgisi sorgulamayı öğrenirsin.

Type traits nedir?

Type traits, derleme zamanında türler hakkında bilgi veren şablonlardır. <type_traits> başlığında bulunur. std::is_integral<T>::value bir bool sabitidir; T tamsayı türü ise true, değilse false verir.

Trait'ler, şablonlarda dallanma, tür seçimi ve kısıt koyma için kullanılır. C++17 ile gelen _v kısaltması sonucu doğrudan verir: std::is_integral_v<T>, std::is_integral<T>::value ile aynıdır. Bütün sonuçlar derleme zamanında hesaplanır.

_v ve ::value

Bir trait'in sonucuna iki biçimde erişilir. Klasik: std::is_integral<T>::value. C++17 kısaltması: std::is_integral_v<T>. İkisi de aynı bool sabitini verir; kısaltma yalnızca daha az yazmaktır.

Benzer biçimde std::conditional<C, A, B>::type yerine std::conditional_t<C, A, B> kullanılır. _v sabit (value) için, _t tür (type) içindir. Bu kısaltmalar okunaklı şablon kodu yazmanın standart yoludur.

Uygulama IsIntTag şablonunu yaz

template <typename T> struct IsIntTag yaz. İçinde static const bool value = std::is_integral_v<T>; olsun. main içinde std::cout << IsIntTag<int>::value; yaz.

Başlangıç kodu

main.cpp
#include <iostream>
#include <type_traits>

// IsIntTag şablonunu yaz

int main() {
    // Sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <type_traits>

template <typename T>
struct IsIntTag {
    static const bool value = std::is_integral_v<T>;
};

int main() {
    std::cout << IsIntTag<int>::value;
    return 0;
}

Beklenen çıktı

1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Type traits ne zaman değerlendirilir?

  • Derleme zamanında Doğru cevap
  • Çalışma zamanında
  • Bağlantı zamanında
  • Yükleme zamanında

Açıklama: Type traits derleme zamanında hesaplanır.

2 Trait kısaltmasını tamamla

Soru
template <typename T>
constexpr bool is_int = std::____<T>;
Cevap
template <typename T>
constexpr bool is_int = std::is_integral_v<T>;

Açıklama: is_integral_v<T> derleme zamanı bool sabitidir.

3 Trait'i amacına eşle

Kavram Anlamı
std::is_integral_v<T> Tamsayı mı?
std::is_floating_point_v<T> Ondalık mı?
std::is_pointer_v<T> İşaretçi mi?
std::is_class_v<T> Sınıf mı?

İleri seviye bölümündeki tüm dersler