Maison >développement back-end >C++ >Comment créer et utiliser des pointeurs de fonctions génériques C++ ?
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.
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. 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!