CodeBlanks Logo Icon CodeBlanks

std::function

std::function ile lambda saklamayı öğrenirsin.

std::function

std::function bir lambda'yı (veya başka çağrılabilir nesneyi) saklayan genel bir türdür. <functional> başlığında tanımlıdır. Örnek: std::function<int(int)> f = [](int x) { return x * x; };. Burada int(int) bir int alıp int döndüren fonksiyon türüdür.

auto ile lambda saklamak daha kolaydır ama std::function'ın avantajı, lambda türünün derleyici tarafından bilinmesine gerek olmamasıdır. Bu, lambda'yı bir fonksiyon parametresi olarak geçirmeyi veya bir vector'de saklamayı kolaylaştırır. Bu tekniğe type erasure (tür silme) denir. std::function biraz daha yavaştır çünkü çağrıyı dolaylı yapar; ama esneklik genellikle bu maliyete değer.

Type erasure

Her lambda'nın benzersiz bir türü vardır; derleyici tarafından üretilir ve adı yoktur. Bu yüzden iki lambda'nın türü aynı olsa bile birbirine atanamaz. std::function bu sorunu çözer: farklı lambda türlerini tek bir std::function türünde saklar.

Örnek: std::function<int(int)> f1 = [](int x) { return x + 1; }; ve std::function<int(int)> f2 = [](int x) { return x * 2; }; aynı std::function türündedir. Bu sayede bir std::vector<std::function<int(int)>> içinde farklı lambdaları saklayabilirsin. Bu, olay işleme (event handling) ve geri çağrı (callback) tasarımlarında çok kullanışlıdır.

Uygulama Lambda'yı std::function'da sakla

std::function<int(int)> square = [](int x) { return x * x; }; ile bir lambda'yı std::function'da sakla. square(6) çağrısının sonucunu std::cout ile yazdır. #include <functional> gerektiğini unutma.

Başlangıç kodu

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

int main() {
    // kare alan lambda'yı bir function nesnesinde sakla ve çağır
    return 0;
}

Örnek çözüm

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

int main() {
    std::function<int(int)> square = [](int x) { return x * x; };
    std::cout << square(6);
    return 0;
}

Beklenen çıktı

36

Soru ve cevaplar

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

1 Parçayı rolüne eşle

Kavram Anlamı
std::function<int(int)> Lambda türü
<functional> Gerekli başlık
int(int) int alır int döndürür
f(5) Saklanan lambda'yı çağırır

2 std::function ne sağlar?

main.cpp
std::function<int(int)> f = [](int x) { return x; };
  • Daha hızlı çalışma
  • Lambda'yı bir nesnede saklama Doğru cevap
  • Otomatik capture
  • Derleme hatası gizleme

Açıklama: std::function lambda'yı bir nesnede saklar.

3 std::function tanımla

Soru
std::____<int(int)> square = [](int x) { return x * x; };
Cevap
std::function<int(int)> square = [](int x) { return x * x; };

Açıklama: std::function lambda saklayan genel türdür.

Orta seviye bölümündeki tüm dersler