Maison >développement back-end >C++ >Pointeurs de fonctions C++ en action : résoudre les problèmes de programmation courants

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

WBOY
WBOYoriginal
2024-04-29 17:33:01895parcourir

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);

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;
}

Sortie :

Alice
Bob
Carol

Bob
Alice
Carol

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;
}

Sortie :

Button clicked!

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;
}

Résultat :

Callback function called with argument: 10

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