Maison  >  Article  >  développement back-end  >  Découvrez comment les pointeurs de fonctions C++ simplifient la refactorisation du code

Découvrez comment les pointeurs de fonctions C++ simplifient la refactorisation du code

WBOY
WBOYoriginal
2024-06-04 21:42:591052parcourir

Les pointeurs de fonction sont une fonctionnalité puissante en C++, permettant de transmettre des fonctions en tant que paramètres, améliorant ainsi la flexibilité de la reconstruction du code. Syntaxiquement, les pointeurs de fonction sont déclarés à l'aide de crochets angulaires au lieu d'astérisques. En utilisant l'opérateur d'adresse & pour créer un pointeur de fonction, puis en utilisant un tableau pour stocker le pointeur de fonction, vous pouvez ajuster dynamiquement le comportement de la fonction selon vos besoins, simplifier la structure du code et améliorer l'adaptabilité du code.

探索 C++ 函数指针如何简化代码重构

Explorez les pointeurs de fonction C++ : une aide puissante pour la refactorisation du code

Les pointeurs de fonction sont une fonctionnalité puissante en C++ qui nous permet de transmettre des fonctions en tant que paramètres d'autres fonctions. Cela offre une grande flexibilité dans la refactorisation du code car cela nous permet d'ajuster dynamiquement le comportement de la fonction selon les besoins.

Syntaxe du pointeur de fonction

La syntaxe d'un pointeur de fonction est très similaire à celle d'un pointeur de fonction normal, mais elle utilise des crochets angulaires a8093152e673feb7aba1828c43532094 Par exemple :

using FunctionPtr = void(int);

La déclaration ci-dessus crée un type de pointeur vers une fonction qui accepte un paramètre entier et renvoie void.

Utilisation du pointeur de fonction

Pour créer un pointeur de fonction, nous pouvons utiliser l'opérateur d'adresse &. Par exemple, pour créer un pointeur vers la fonction print_number : print_number 函数的指针:

int print_number(int n) {
  std::cout << n << std::endl;
}

int main() {
  FunctionPtr ptr = &print_number;
}

现在,我们可以使用 ptr 就像使用普通函数一样:

ptr(10);  // 输出:10

代码重构示例

函数指针真正发挥作用的地方是在代码重构中。假设我们有一个 calculate 函数,它可以计算使用不同公式的数值:

double calculate(double a, double b, int formula_id) {
  switch (formula_id) {
    case 1:
      return a + b;
    case 2:
      return a - b;
    case 3:
      return a * b;
    default:
      return 0;
  }
}

如果我们想要添加一个新的公式,我们需要修改 calculate 函数。使用函数指针,我们可以消除这种需要:

using CalculatePtr = double(double, double);

// 创建一个包含所有公式的函数指针数组
std::array<CalculatePtr, 4> formulas = {
    [](double a, double b) { return a + b; },
    [](double a, double b) { return a - b; },
    [](double a, double b) { return a * b; },
    [](double a, double b) { return a / b; }  // 新添加的公式
};

double calculate(double a, double b, int formula_id) {
  if (formula_id < 0 || formula_id >= formulas.size()) {
    return 0;
  }
  return formulas[formula_id](a, b);
}

现在,我们可以通过向 formulas 数组添加新的函数指针来轻松添加新的公式,无需更改 calculaterrreee

Maintenant, nous pouvons utiliser ptr comme une fonction normale :

rrreeeExemple de refactorisation de code

Quels sont les pointeurs de fonction qui font vraiment le la place est dans la refactorisation du code. Supposons que nous ayons une fonction calculer qui peut calculer des valeurs en utilisant différentes formules : 🎜rrreee🎜Si nous voulons ajouter une nouvelle formule, nous devons modifier la fonction calculer. En utilisant des pointeurs de fonction, nous pouvons éliminer ce besoin : 🎜rrreee🎜 Maintenant, nous pouvons facilement ajouter de nouvelles formules en ajoutant un nouveau pointeur de fonction au tableau formules sans changer la fonction calculer. 🎜🎜🎜Conclusion🎜🎜🎜Les pointeurs de fonction jouent un rôle important dans la refactorisation du code C++. Ils nous permettent de transmettre facilement des fonctions en tant que paramètres, créant ainsi un code dynamiquement évolutif et hautement maintenable. En tirant parti des pointeurs de fonction, nous pouvons simplifier la structure de notre code et rendre notre code plus résilient aux changements futurs. 🎜

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