C++ Academy · Les

std::bind

Bind argumenten aan callables

Les 3 van 413 stappen

std::bind is een gratis C++ Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.

Wat is std::bind?

std::bind maakt een nieuw aanroepbaar object door enkele argumenten van een bestaand object vast te leggen. Dit heet partiële toepassing.

  • Bevindt zich in <functional>.
  • Retourneert een aanroepbaar object van een niet-gespecificeerd type.
#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;
}

Plaatsaanduiders

Plaatsaanduiders zoals std::placeholders::_1 markeren argumenten die later worden aangeleverd wanneer het gebonden object wordt aangeroepen.

#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;
}

Argumenten herschikken

Plaatsaanduiders kunnen in elke volgorde voorkomen, zodat je de posities van de argumenten die de aanroeper aanlevert kunt omwisselen.

#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;
}

Meerdere argumenten binden

Je kunt meerdere argumenten tegelijk vastleggen en de overige als plaatsaanduiders laten staan.

#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;
}

Het resultaat opslaan

Het object dat door std::bind wordt geretourneerd, kan in een std::function worden opgeslagen voor een concreet type met een naam.

#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;
}

Lidfuncties binden

std::bind kan een lidfunctie als doel gebruiken door de lidpointer en een object (of plaatsaanduider) voor this door te geven.

#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;
}

Binden op waarde versus op verwijzing

Gebonden argumenten worden standaard gekopieerd. Omwikkel een argument met std::ref om het op verwijzing te binden, zodat wijzigingen zichtbaar zijn.

#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;
}

Gebonden aanroepbare objecten in algoritmen gebruiken

Een gebonden aanroepbaar object werkt als predicaat of bewerking in standaardalgoritmen.

#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 nesten

Bind-expressies kunnen worden samengesteld, al worden ze daardoor snel moeilijk leesbaar. Elke plaatsaanduider verwijst nog steeds naar de argumenten van de uiteindelijke aanroeper.

#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;
}

Extra argumenten negeren

Als de gebonden aanroep slechts enkele plaatsaanduiders gebruikt, worden extra argumenten die tijdens de aanroep worden doorgegeven gewoon genegeerd.

#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;
}

Wanneer een lambda duidelijker is

Modern C++ geeft vaak de voorkeur aan een lambda boven std::bind, omdat die leesbaarder is en de compiler haar beter kan optimaliseren.

#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;
}

Korte toets

Toets je begrip van plaatsaanduiders.

Samenvatting

Je hebt geleerd hoe std::bind werkt:

  • het legt enkele argumenten vast en gebruikt plaatsaanduiders _1, _2 voor de overige
  • het kan argumenten herschikken, lidfuncties binden en std::ref gebruiken
  • resultaten kunnen in std::function worden opgeslagen en in algoritmen worden gebruikt
  • lambdas zijn vaak duidelijker in modern C++

Vervolgens vergelijk je lambdas, bind en functiepointers om het juiste hulpmiddel te kiezen.

Gratis beginnen

Leer C++ met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “std::bind” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “std::bind”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.

Wat leer ik in “std::bind”?

Bind argumenten aan callables Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C++ Academy te beginnen?

Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “std::bind”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C++ Academy?

Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Functieaanwijzers
  2. std::function
  3. std::bind
  4. Callables kiezen
← Terug naar C++ Academy