Sobes.tech
Junior

Mis on tagasikutsumise funktsioonid?

sobes.tech AI

Vastus AI-lt

Funktsioon, mis antakse edasi teisele funktsioonile argumendina. Kutsub funktsioon, millele see on antud, hiljem välja kindlal hetkel või kindla sündmuse toimumisel.

Rakendused:

  • Sündmuste töötlemine (GUI, süsteemi sündmused)
  • Asünkroonilised operatsioonid
  • Käitumise strateegiad
  • Üldised algoritmid

Näide:

C:

#include <stdio.h>

// Funktsiooni näitaja tüüp, mis võtab vastu int ja tagastab void
typedef void (*CallbackFunc)(int);

void do_something_with_callback(int value, CallbackFunc callback) {
    printf("Töötlen väärtusega: %d\n", value);
    if (callback != NULL) {
        callback(value); // Kutsume tagasihelifunktsiooni
    }
}

void my_callback_function(int data) {
    printf("Tagasihelifunktsioon täidetud väärtusega: %d\n", data);
}

int main() {
    do_something_with_callback(10, my_callback_function);
    do_something_with_callback(20, NULL); // Ilma tagasihelifunktsioonita
    return 0;
}

C++:

#include <iostream>
#include <functional> // std::function jaoks

void do_something_with_callback(int value, std::function<void(int)> callback) {
    std::cout << "Töötlen väärtusega: " << value << std::endl;
    if (callback) { // Kontroll, kas on tagasihelifunktsioon
        callback(value); // Kutsume tagasihelifunktsiooni
    }
}

void my_callback_function(int data) {
    std::cout << "Tagasihelifunktsioon täidetud väärtusega: " << data << std::endl;
}

int main() {
    do_something_with_callback(10, my_callback_function);

    // Lambda funktsioon kui tagasihelifunktsioon
    do_something_with_callback(20, [](int data) {
        std::cout << "Lambda tagasihelifunktsioon täidetud väärtusega: " << data << std::endl;
    });

    do_something_with_callback(30, nullptr); // Ilma tagasihelifunktsioonita

    return 0;
}