Özet - Type traits
- C++ kursu
- İleri seviye
- Ders 18/83
- 5 dk
is_integral, enable_if ve conditional'ı birleştirerek bir generic fonksiyon yazarsın.
Özet - Type traits
Bu grupta type traits'in beş aracını gördün: std::is_integral_v ile tür sınıflama, std::enable_if_t ile SFINAE kısıtı, std::conditional_t ile derleme zamanı tür seçimi, std::decay_t ile tür ayıklama ve std::remove_reference_t ile yalnızca referans ayıklama. Hepsi derleme zamanında çalışır.
Bu araçlar birlikte, şablonların hangi türlerle çağrılabileceğini denetlemek ve türe göre farklı kod üretmek için kullanılır. Şimdi öğrendiklerini birleştiren küçük bir görev yazacaksın.
Uygulama WideType özet
template <typename T> using WideType = std::conditional_t<std::is_integral_v<T>, long, double>; yaz. main içinde std::cout << std::is_same_v<WideType<int>, long>; yaz.
Başlangıç kodu
#include <iostream>
#include <type_traits>
// WideType diğer adını yaz
int main() {
// Sonucu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <type_traits>
template <typename T>
using WideType = std::conditional_t<std::is_integral_v<T>, long, double>;
int main() {
std::cout << std::is_same_v<WideType<int>, long>;
return 0;
}Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi araç derleme zamanında tür seçer?
- std::is_integral_v
- std::conditional_t Doğru cevap
- std::decay_t
- std::enable_if_t
Açıklama: std::conditional_t<C, A, B> derleme zamanında A veya B seçer.
2 Aracı amacına eşle
| Kavram | Anlamı |
|---|---|
std::is_integral_v<T> |
Tür sınıflama |
std::enable_if_t<cond> |
SFINAE kısıtı |
std::conditional_t<C, A, B> |
Tür seçme |
std::decay_t<T> |
Tür ayıklama |
3 conditional satırını tamamla
template <typename T>
using WideType = std::____<std::is_integral_v<T>, long, double>;
template <typename T>
using WideType = std::conditional_t<std::is_integral_v<T>, long, double>;
Açıklama: conditional_t<C, A, B> derleme zamanı tür seçer.