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
Libérer: 2024-04-17 14:06:02
original
427 Les gens l'ont consulté

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...);
Copier après la connexion

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);
Copier après la connexion
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);
Copier après la connexion
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) {
  // 使用比较函数对数组进行排序
  // ...
}
Copier après la connexion

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>);
Copier après la connexion

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

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal