Назад к вопросам
Junior
84
questionbank

Что такое функции обратного вызова?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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;
}