Sobes.tech
Junior

Kas yra atgalinio kvietimo funkcijos?

sobes.tech AI

Atsakymas iš AI

Funkcija, kuri perduodama kitai funkcijai kaip argumentas. Iškviečianti funkcija gali vėliau iškviesti perduotą funkciją tam tikru momentu arba įvykus tam tikram įvykiui.

Naudojimas:

  • Įvykių apdorojimas (GUI, sisteminiai įvykiai)
  • Asinchroninės operacijos
  • Elgesio strategijos
  • Bendrieji algoritmai

Pavyzdys:

C:

#include <stdio.h>

// Funkcijos rodyklės tipas, priimantis int ir grąžinantis void
typedef void (*CallbackFunc)(int);

void do_something_with_callback(int value, CallbackFunc callback) {
    printf("Darau kažką su reikšme: %d\n", value);
    if (callback != NULL) {
        callback(value); // Kviesime atgalinę funkciją
    }
}

void my_callback_function(int data) {
    printf("Atgalinė funkcija įvykdyta su reikšme: %d\n", data);
}

int main() {
    do_something_with_callback(10, my_callback_function);
    do_something_with_callback(20, NULL); // Be atgalinės funkcijos
    return 0;
}

C++:

#include <iostream>
#include <functional> // Dėl std::function

void do_something_with_callback(int value, std::function<void(int)> callback) {
    std::cout << "Darau kažką su reikšme: " << value << std::endl;
    if (callback) { // Patikrinimas, ar yra atgalinė funkcija
        callback(value); // Kviesime atgalinę funkciją
    }
}

void my_callback_function(int data) {
    std::cout << "Atgalinė funkcija įvykdyta su reikšme: " << data << std::endl;
}

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

    // Lambda funkcija kaip atgalinė funkcija
    do_something_with_callback(20, [](int data) {
        std::cout << "Lambda atgalinė funkcija įvykdyta su reikšme: " << data << std::endl;
    });

    do_something_with_callback(30, nullptr); // Be atgalinės funkcijos

    return 0;
}