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;
}