Concept overloading
- C++ kursu
- İleri seviye
- Ders 65/83
- 5 dk
concept ile fonksiyon overloading öğrenirsin.
Concept overloading nedir?
Concept overloading, aynı addaki şablon fonksiyonun farklı concept kısıtlarıyla birden çok kez tanımlanmasıdır. Derleyici, çağrı sırasında türün hangi concept'i sağladığına bakarak en uygun aşırı yüklemeyi seçer.
Örnek: bir print fonksiyonu integral ve floating_point türleri için ayrı ayrı yazılabilir. template<std::integral T> void print(T v) ve template<std::floating_point T> void print(T v). print(3) integral sürümünü, print(2.5) floating_point sürümünü çağırır. Böylece tür temelli davranış derleme zamanında ayrıştırılır.
Daha özelleşmiş concept
Concept overloading'de daha özelleşmiş concept, daha genel olana tercih edilir. std::integral daha genel; std::signed_integral daha özelleşmiştir.
Örnek: hem std::integral hem std::signed_integral sürümü varsa, print(-3) signed sürümüne gider. Çünkü int hem integral hem signed_integral'dir; signed_integral daha özeldir. Derleyici bu seçimi partial ordering ile yapar. Böylece belirsizlik olmadan doğru sürüm seçilir.
Uygulama integral ve floating_point print yaz
İki print aşırı yüklemesi yaz: birincisi template<std::integral T> void print(T v) gövdesi std::cout << "i:" << v;; ikincisi template<std::floating_point T> void print(T v) gövdesi std::cout << "f:" << v;. main içinde print(3) çağrısını yap.
Başlangıç kodu
#include <iostream>
#include <concepts>
// integral print aşırı yüklemesini yaz
// floating_point print aşırı yüklemesini yaz
int main() {
// ilk çağrıyı yap
return 0;
}Örnek çözüm
#include <iostream>
#include <concepts>
template<std::integral T>
void print(T v) {
std::cout << "i:" << v;
}
template<std::floating_point T>
void print(T v) {
std::cout << "f:" << v;
}
int main() {
print(3);
return 0;
}Beklenen çıktı
i:3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşırı yükleme nasıl seçilir?
- Türün hangi concept'i sağladığına bakılır Doğru cevap
- Rastgele seçilir
- Çalışma zamanında türü sorgulanır
- Fonksiyonun tanım sırasına göre
Açıklama: Derleyici, çağrının türünün hangi concept'i sağladığına bakar ve en özelleşmiş sürümü seçer.
2 Çağrıyı türe eşle
| Kavram | Anlamı |
|---|---|
print(3) |
int çağrısı |
print(2.5) |
double çağrısı |
print('a') |
char çağrısı |
print(3.14f) |
float çağrısı |
3 Floating point kısıtı
template<____ T> void print(T v) { std::cout << v; }
template<std::floating_point T> void print(T v) { std::cout << v; }
Açıklama: std::floating_point yalnızca ondalık türleri kabul eder.