CodeBlanks Logo Icon CodeBlanks

is_integral

is_integral ve is_floating_point ile tür sınıflandırma öğrenirsin.

is_integral / is_floating_point

std::is_integral_v<T>, T tamsayı türü mü diye sorar. int, char, long, bool için true; double, std::string için false verir. std::is_floating_point_v<T> ise float, double için true verir.

Bu iki trait, sayısal türleri sınıflandırmak için kullanılır. Bir şablon, türüne göre farklı kod çalıştırmak istiyorsa önce trait ile sınıfı belirler, sonra if constexpr ile dallanır. Bu, gereksiz aşırı yükleme yazmaktan daha kısadır.

if constexpr ile kullanım

Bir trait sonucu if constexpr koşulu olarak verilirse, derleyici yalnızca uygun dalı derler. Örnek: if constexpr (std::is_integral_v<T>) return x + 1; else return x; Tamsayılar için x + 1 döner; std::string için bu dal derlenmez.

Bu yöntem, gereksiz aşırı yükleme yazmamak için kullanışlıdır. Tek şablon, birden fazla türü destekler; her tür için yalnızca ilgili dal derlenir. Trait + if constexpr, modern C++'ın temel bir kalıbıdır.

Uygulama classify şablonunu yaz

template <typename T> const char* classify() yaz. Gövdede if constexpr (std::is_integral_v<T>) return "int"; else return "other"; olsun. main içinde std::cout << classify<int>(); yaz.

Başlangıç kodu

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

// classify şablonunu yaz

int main() {
    // classify<int>() çağır ve yazdır
    return 0;
}

Örnek çözüm

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

template <typename T>
const char* classify() {
    if constexpr (std::is_integral_v<T>) return "int";
    else return "other";
}

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

Beklenen çıktı

int

Soru ve cevaplar

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

1 Ondalık trait'ini tamamla

Soru
template <typename T>
constexpr bool is_num = std::is_integral_v<T> || std::____<T>;
Cevap
template <typename T>
constexpr bool is_num = std::is_integral_v<T> || std::is_floating_point_v<T>;

Açıklama: is_floating_point_v<T> ondalık türleri tanır.

2 is_integral_v<std::string> ne döndürür?

main.cpp
std::is_integral_v<std::string>
  • true
  • false Doğru cevap
  • Derleme hatası
  • std::string

Açıklama: std::string tamsayı türü değildir; sonuç false olur.

3 Türünü trait'ine eşle

Kavram Anlamı
is_integral_v<int> true (tamsayı)
is_floating_point_v<int> false (tamsayı değil)
is_integral_v<double> false (ondalık değil)
is_floating_point_v<double> true (ondalık)

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