Sobes.tech
Junior

Čo sú to spätné volania?

sobes.tech AI

Odpoveď od AI

Funkcia, ktorá sa odovzdáva inej funkcii ako argument. Funkcia, ktorá ju volá, môže následne vykonať odovzdanú funkciu v určitom momente alebo pri výskyte určitej udalosti.

Použitie:

  • Spracovanie udalostí (GUI, systémové udalosti)
  • Asynchrónne operácie
  • Stratégie správania
  • Všeobecné algoritmy

Príklad:

C:

#include <stdio.h>

// Typ ukazovateľa na funkciu, ktorá prijíma int a vracia void
typedef void (*CallbackFunc)(int);

void do_something_with_callback(int value, CallbackFunc callback) {
    printf("Robím niečo s hodnotou: %d\n", value);
    if (callback != NULL) {
        callback(value); // Volanie spätného volania
    }
}

void my_callback_function(int data) {
    printf("Funkcia spätného volania vykonaná s hodnotou: %d\n", data);
}

int main() {
    do_something_with_callback(10, my_callback_function);
    do_something_with_callback(20, NULL); // Bez funkcie spätného volania
    return 0;
}

C++:

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

void do_something_with_callback(int value, std::function<void(int)> callback) {
    std::cout << "Robím niečo s hodnotou: " << value << std::endl;
    if (callback) { // Kontrola, či funkcia spätného volania existuje
        callback(value); // Volanie funkcie spätného volania
    }
}

void my_callback_function(int data) {
    std::cout << "Funkcia spätného volania vykonaná s hodnotou: " << data << std::endl;
}

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

    // Lambda funkcia ako spätné volanie
    do_something_with_callback(20, [](int data) {
        std::cout << "Lambda spätné volanie vykonané s hodnotou: " << data << std::endl;
    });

    do_something_with_callback(30, nullptr); // Bez funkcie spätného volania

    return 0;
}