Type traits nedir?
- C++ kursu
- İleri seviye
- Ders 13/83
- 5 dk
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
#include <iostream>
#include <type_traits>
// IsIntTag şablonunu yaz
int main() {
// Sonucu yazdır
return 0;
}Örnek çözüm
#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
template <typename T>
constexpr bool is_int = std::____<T>;
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ı? |