0Pricing
C++ Academy · Ders

std::bind

Bağımsız değişkenleri çağrılabilir öğelere bağlayın

std::bind, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

std::bind Nedir?

std::bind, mevcut bir çağrılabilir nesnenin bazı bağımsız değişkenlerini sabitlenmiş hâle getirerek yeni bir çağrılabilir nesne oluşturur. Buna kısmi uygulama denir.

  • <functional> içinde bulunur.
  • Belirtilmemiş bir çağrılabilir nesne döndürür.
#include <iostream>
#include <functional>

int add(int a, int b) { return a + b; }

int main() {
    auto add10 = std::bind(add, 10, 5);
    std::cout << add10() << '\n';
    return 0;
}

Yer Tutucular

std::placeholders::_1 gibi yer tutucular, bağlı nesne çağrıldığında daha sonra sağlanacak bağımsız değişkenleri belirtir.

#include <iostream>
#include <functional>

int add(int a, int b) { return a + b; }

int main() {
    using namespace std::placeholders;
    auto add10 = std::bind(add, 10, _1);
    std::cout << add10(7) << '\n';
    return 0;
}

Bağımsız Değişkenlerin Sırasını Değiştirme

Yer tutucular herhangi bir sırada görünebilir; bu, çağıranın sağladığı bağımsız değişkenlerin konumlarını değiştirmenizi sağlar.

#include <iostream>
#include <functional>

int sub(int a, int b) { return a - b; }

int main() {
    using namespace std::placeholders;
    auto flipped = std::bind(sub, _2, _1);
    std::cout << flipped(3, 10) << '\n';
    return 0;
}

Birden Çok Bağımsız Değişkeni Bağlama

Diğerlerini yer tutucu olarak bırakırken birden çok bağımsız değişkeni aynı anda sabitleyebilirsiniz.

#include <iostream>
#include <functional>

int volume(int l, int w, int h) { return l * w * h; }

int main() {
    using namespace std::placeholders;
    auto box = std::bind(volume, 2, _1, 5);
    std::cout << box(3) << '\n';
    return 0;
}

Sonucu Saklama

std::bind tarafından döndürülen nesne, belirli ve adlandırılmış bir tür için bir std::function içinde saklanabilir.

#include <iostream>
#include <functional>

int add(int a, int b) { return a + b; }

int main() {
    using namespace std::placeholders;
    std::function<int(int)> add100 = std::bind(add, 100, _1);
    std::cout << add100(1) << '\n';
    return 0;
}

Üye İşlevlerini Bağlama

std::bind, üye işaretçisini ve this için bir nesneyi (veya yer tutucuyu) aktararak bir üye işlevini hedefleyebilir.

#include <iostream>
#include <functional>

struct Counter {
    int add(int x) { return value += x; }
    int value = 0;
};

int main() {
    using namespace std::placeholders;
    Counter c;
    auto bump = std::bind(&Counter::add, &c, _1);
    std::cout << bump(5) << ' ' << bump(3) << '\n';
    return 0;
}

Değere Karşı Başvuruya Göre Bağlama

Bağlanan bağımsız değişkenler varsayılan olarak kopyalanır. Birini std::ref içine sararak başvuruya göre bağlayın; böylece değişiklikler görünür olur.

#include <iostream>
#include <functional>

void addTo(int& target, int amount) { target += amount; }

int main() {
    using namespace std::placeholders;
    int total = 0;
    auto acc = std::bind(addTo, std::ref(total), _1);
    acc(5);
    acc(10);
    std::cout << total << '\n';
    return 0;
}

Algoritmalarda Bağlı Çağrılabilir Nesneleri Kullanma

Bağlı bir çağrılabilir nesne, standart algoritmalarda koşul veya işlem olarak çalışır.

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>

bool greaterThan(int x, int limit) { return x > limit; }

int main() {
    using namespace std::placeholders;
    std::vector<int> v = {1, 5, 8, 2, 9};
    auto over4 = std::bind(greaterThan, _1, 4);
    std::cout << std::count_if(v.begin(), v.end(), over4) << '\n';
    return 0;
}

bind İç İçe Kullanımı

bind ifadeleri birleştirilebilir, ancak bu ifadelerin okunması kısa sürede zorlaşır. Her yer tutucu yine son çağıranın bağımsız değişkenlerini belirtir.

#include <iostream>
#include <functional>

int add(int a, int b) { return a + b; }
int times(int a, int b) { return a * b; }

int main() {
    using namespace std::placeholders;
    auto f = std::bind(add, std::bind(times, 2, _1), 3);
    std::cout << f(5) << '\n';
    return 0;
}

Fazladan Bağımsız Değişkenleri Yok Sayma

Bağlı çağrı yalnızca bazı yer tutucuları kullanıyorsa, çağrı sırasında aktarılan fazladan bağımsız değişkenler basitçe yok sayılır.

#include <iostream>
#include <functional>

int show(int a) { return a; }

int main() {
    using namespace std::placeholders;
    auto f = std::bind(show, _1);
    std::cout << f(42, 99, 100) << '\n';
    return 0;
}

Bir Lambda İfadesinin Daha Açık Olduğu Durumlar

Modern C++ çoğu zaman std::bind yerine lambda ifadesini tercih eder; çünkü lambda ifadesi daha okunabilirdir ve derleyici onu daha iyi en iyi duruma getirir.

#include <iostream>
#include <functional>

int add(int a, int b) { return a + b; }

int main() {
    auto add10 = [](int x) { return add(10, x); };
    std::cout << add10(5) << '\n';
    return 0;
}

Kısa Kontrol

Yer tutucular hakkındaki anlayışınızı sınayın.

Özet

std::bind işleyişi hakkında şunları öğrendiniz:

  • Bazı bağımsız değişkenleri sabitler ve geri kalanı için _1, _2 yer tutucularını kullanır
  • Bağımsız değişkenlerin sırasını değiştirebilir, üye işlevlerini bağlayabilir ve std::ref kullanabilir
  • Sonuçlar std::function içinde saklanabilir ve algoritmalarda kullanılabilir
  • Modern C++ dilinde lambda ifadeleri çoğu zaman daha açıktır

Sırada, doğru aracı seçmek için lambda ifadelerini, bind'i ve işlev işaretçilerini karşılaştıracaksınız.

Sıkça Sorulan Sorular

“std::bind” dersi ücretsiz mi?

Evet — “std::bind” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“std::bind” dersinde ne öğreneceğim?

Bağımsız değişkenleri çağrılabilir öğelere bağlayın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“std::bind” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşlev İşaretçileri
  2. std::function
  3. std::bind
  4. Çağrılabilir Ögeleri Seçme
← C++ Academy Sayfasına Dön