Maison > développement back-end > C++ > le corps du texte

Pointeurs de fonctions C++ en action : résoudre les problèmes de programmation courants

WBOY
Libérer: 2024-04-29 17:33:01
original
871 Les gens l'ont consulté

Les pointeurs de fonction constituent un moyen puissant de résoudre les défis de programmation en C++, notamment : Fonctions de comparaison : utilisez des pointeurs de fonction pour implémenter des comparateurs personnalisés afin de faciliter le tri des objets. Gestion des événements : créez un système de gestion des événements en enregistrant et en déclenchant des pointeurs de fonction pour les événements. Fonction de rappel : transférez le contrôle à d'autres fonctions et restaurez le contrôle au moment approprié pour mettre en œuvre la fonction de rappel.

C++ 函数指针实战:解决常见编程难题

Pratique des pointeurs de fonctions C++ : résoudre des problèmes de programmation courants

Les pointeurs de fonctions sont une fonctionnalité puissante en C++, permettant de transmettre ou de stocker des fonctions en tant que paramètres. En comprenant les concepts de base et les applications pratiques des pointeurs de fonction, vous pouvez résoudre efficacement divers défis de programmation.

Concept de base

Un pointeur de fonction est un pointeur vers une fonction. Son type est un pointeur vers une fonction dont la valeur de retour et les types de paramètres sont spécifiés dans la déclaration du pointeur. Par exemple :

typedef int (*FuncPtr)(int, int);
Copier après la connexion

Ceci déclare un pointeur vers une fonction avec un type de retour int et des paramètres int et int.

Cas pratique

1. Fonction de comparaison**

Les pointeurs de fonction peuvent être utilisés pour comparer deux objets. Le code suivant montre comment utiliser des pointeurs de fonction pour implémenter un comparateur personnalisé :

#include <algorithm>

struct Person {
    std::string name;
    int age;
};

// 比较器函数
bool compare_by_name(const Person& lhs, const Person& rhs) {
    return lhs.name < rhs.name;
}

bool compare_by_age(const Person& lhs, const Person& rhs) {
    return lhs.age < rhs.age;
}

int main() {
    std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Carol", 32}};

    // 使用函数指针对人进行排序
    std::sort(people.begin(), people.end(), compare_by_name);
    for (auto& person : people) {
        std::cout << person.name << std::endl;
    }
    std::cout << std::endl;

    // 使用不同的函数指针对人进行排序
    std::sort(people.begin(), people.end(), compare_by_age);
    for (auto& person : people) {
        std::cout << person.name << std::endl;
    }
    return 0;
}
Copier après la connexion

Sortie :

Alice
Bob
Carol

Bob
Alice
Carol
Copier après la connexion

2. Gestion des événements**

Les pointeurs de fonction peuvent être utilisés pour créer des systèmes de gestion d'événements. L'exemple suivant montre comment utiliser un pointeur de fonction pour enregistrer et déclencher des événements :

#include <map>
#include <functional>

class EventManager {
public:
    // 注册事件
    template<typename Function>
    void Register(const std::string& event, Function callback) {
        callbacks[event].push_back(callback);
    }

    // 触发事件
    void Trigger(const std::string& event) {
        for (auto& callback : callbacks[event]) {
            callback();
        }
    }

private:
    std::map<std::string, std::vector<std::function<void()>>> callbacks;
};

int main() {
    EventManager manager;

    // 注册按钮点击事件
    manager.Register("button_click", []() { std::cout << "Button clicked!" << std::endl; });

    // 模拟按钮点击
    manager.Trigger("button_click");

    return 0;
}
Copier après la connexion

Sortie :

Button clicked!
Copier après la connexion

3. Fonctions de rappel**

Les pointeurs de fonction peuvent être utilisés pour implémenter des fonctions de rappel, permettant à une fonction de céder le contrôle à. une autre fonction, et reprendre le contrôle lorsque le moment est venu. L'exemple suivant montre comment créer une fonction de rappel à l'aide d'un pointeur de fonction :

#include <thread>

void Callback(int num) {
    std::cout << "Callback function called with argument: " << num << std::endl;
}

int main() {
    std::thread thread(Callback, 10);
    thread.join();
    return 0;
}
Copier après la connexion

Résultat :

Callback function called with argument: 10
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!

Étiquettes associées:
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!