Sobes.tech
Junior

Какви са функциите за обратно извикване?

sobes.tech AI

Отговор от AI

Функция, която се предава на друга функция като аргумент. Функцията, която я извиква, може след това да изпълни предадената функция в определен момент или при настъпване на определено събитие.

Приложения:

  • Обработка на събития (GUI, системни събития)
  • Асинхронни операции
  • Стратегии за поведение
  • Общи алгоритми

Пример:

C:

#include <stdio.h>

// Тип указател към функция, която приема int и връща void
typedef void (*CallbackFunc)(int);

void do_something_with_callback(int value, CallbackFunc callback) {
    printf("Правя нещо с стойността: %d\n", value);
    if (callback != NULL) {
        callback(value); // Извикване на функцията за обратно извикване
    }
}

void my_callback_function(int data) {
    printf("Функцията за обратно извикване е изпълнена със стойност: %d\n", data);
}

int main() {
    do_something_with_callback(10, my_callback_function);
    do_something_with_callback(20, NULL); // Без функция за обратно извикване
    return 0;
}

C++:

#include <iostream>
#include <functional> // За std::function

void do_something_with_callback(int value, std::function<void(int)> callback) {
    std::cout << "Правя нещо с стойността: " << value << std::endl;
    if (callback) { // Проверка дали съществува функция за обратно извикване
        callback(value); // Извикване на функцията за обратно извикване
    }
}

void my_callback_function(int data) {
    std::cout << "Функцията за обратно извикване е изпълнена със стойност: " << data << std::endl;
}

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

    // Ламбда функция като обратно извикване
    do_something_with_callback(20, [](int data) {
        std::cout << "Ламбда обратно извикване е изпълнено със стойност: " << data << std::endl;
    });

    do_something_with_callback(30, nullptr); // Без функция за обратно извикване

    return 0;
}