Maison  >  Article  >  développement back-end  >  Comparaison des pointeurs de fonctions C++ et des fonctions de rappel

Comparaison des pointeurs de fonctions C++ et des fonctions de rappel

WBOY
WBOYoriginal
2024-04-18 12:06:021013parcourir

Les pointeurs de fonction et les fonctions de rappel sont tous deux des outils permettant d'implémenter le mécanisme de rappel. Les pointeurs de fonction sont créés au moment de la compilation et ne peuvent pas être modifiés et doivent être appelés explicitement ; les fonctions de rappel sont créées au moment de l'exécution et peuvent être liées dynamiquement à différentes fonctions et automatiquement appelées par la fonction de rappel. Par conséquent, les pointeurs de fonction conviennent aux rappels statiques, tandis que les fonctions de rappel conviennent aux rappels dynamiques.

C++ 函数指针与回调函数的对比

Comparaison des pointeurs de fonction et des fonctions de rappel en C++

Les pointeurs de fonction et les fonctions de rappel sont tous deux des outils puissants utilisés pour implémenter des mécanismes de rappel en C++.

Pointeur de fonction

  • est une variable pointeur pointant vers une fonction.
  • Créé au moment de la compilation et ne peut pas être modifié au moment de l'exécution.
  • Nécessite un appel explicite.

Fonction de rappel

  • est une fonction qui accepte un pointeur de fonction comme paramètre.
  • Créé au moment de l'exécution et peut être lié dynamiquement à différentes fonctions.
  • Appelé automatiquement par la fonction de rappel.

Cas pratique

Considérons une application qui doit effectuer différentes tâches à différents moments. Nous pouvons y parvenir en utilisant le code suivant :

#include <iostream>

// 定义一个打印消息的函数
void print_message(const char* message) {
  std::cout << message << std::endl;
}

// 定义一个接受函数指针参数的回调函数
void execute_callback(void (*callback)(const char*)) {
  callback("Hello world!");
}

int main() {
  // 使用函数指针调用回调函数
  execute_callback(print_message);
  
  // 动态创建并调用回调函数
  auto lambda = [](const char* message) {
    std::cout << "[Lambda] " << message << std::endl;
  };
  execute_callback(lambda);

  return 0;
}

Dans cet exemple, print_message 是一个函数指针,用于静态回调。lambda 表达式 lambda 是一个动态回调,它在运行时创建并绑定到 execute_callback.

Différence principale

Caractéristiques Pointeur de fonction Fonction de rappel
Minutage de création Temps de compilation Exécution
Modabilité Ne peut pas être modifié Peut être modifié
Méthode d'appel Explicite Automatique
Binding Statique Dynamique

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn