Maison >développement back-end >C++ >Comment créer et utiliser des pointeurs de fonctions génériques C++ ?

Comment créer et utiliser des pointeurs de fonctions génériques C++ ?

PHPz
PHPzoriginal
2024-04-17 14:06:02451parcourir

Un pointeur de fonction générique est un pointeur vers des fonctions de différents types et nombres de paramètres en C++. La création d'un pointeur de fonction générique nécessite l'utilisation d'un modèle qui spécifie le type de valeur de retour de la fonction et un tuple de types de paramètres. Les pointeurs de fonction génériques peuvent être utilisés avec la syntaxe suivante : déclarer un pointeur de fonction, attribuer une fonction au pointeur de fonction et appeler la fonction pointée par le pointeur de fonction. Dans des cas pratiques, des pointeurs de fonctions génériques sont utilisés pour implémenter des fonctions de comparaison d'algorithmes de tri, qui peuvent trier des éléments de différents types.

如何创建和使用 C++ 泛型函数指针?

Comment créer et utiliser des pointeurs de fonctions génériques C++

En C++, un pointeur de fonction est un pointeur vers une fonction. Les pointeurs de fonctions génériques peuvent pointer vers des fonctions de différents types et nombres de paramètres.

Créer un pointeur de fonction générique

Pour créer un pointeur de fonction générique, vous pouvez utiliser le modèle :

template <typename Ret, typename... Args>
using GenericFunctionPointer = Ret (*)(Args...);

où :

  • Ret est le type de valeur de retour de la fonction. Ret 是函数的返回值类型。
  • Args
  • Args est un tuple de types de paramètres de la fonction.

Par exemple, créez un pointeur de fonction générique vers une fonction qui reçoit une valeur entière et renvoie une chaîne :

using FuncPtr = std::string (*)(int);
Utilisation d'un pointeur de fonction générique

Vous pouvez utiliser un pointeur de fonction générique en utilisant la syntaxe suivante :

FuncPtr funcPtr;  // 声明函数指针
// 将函数赋值给函数指针
funcPtr = [](int x) { return std::to_string(x); };
// 调用通过函数指针指向的函数
std::string result = funcPtr(42);
Cas pratique

Considérons un algorithme de tri capable de trier des éléments de différents types (tels que des entiers ou des chaînes). Nous pouvons utiliser un pointeur de fonction générique pour implémenter une fonction de comparaison qui compare deux éléments et renvoie un entier, en fonction de la relation de taille des éléments.

template <typename T>
int compare(const T& a, const T& b) {
  // 比较两个元素并返回 -1 (a < b)、0 (a == b)或 1 (a > b)
  // ...
}

template <typename T>
void sort(T* array, int length, GenericFunctionPointer<int, const T&, const T&> compareFunc) {
  // 使用比较函数对数组进行排序
  // ...
}

En utilisant cette implémentation, nous pouvons trier un tableau d'entiers comme ceci :

int arr[] = {3, 1, 4, 2};
sort(arr, 4, compare<int>);

ou un tableau de chaînes : 🎜
std::string arr[] = {"apple", "banana", "cherry"};
sort(arr, 3, compare<std::string>);

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