CodeBlanks Logo Icon CodeBlanks

Concept overloading

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

main.cpp
#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

main.cpp
#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ı

Soru
template<____ T> void print(T v) { std::cout << v; }
Cevap
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.

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