Petunjuk fungsi C++ dalam tindakan: menyelesaikan masalah pengaturcaraan biasa

WBOY
Lepaskan: 2024-04-29 17:33:01
asal
838 orang telah melayarinya

Penunjuk fungsi menyediakan cara yang berkesan untuk menyelesaikan cabaran pengaturcaraan dalam C++, termasuk: Fungsi perbandingan: Gunakan penunjuk fungsi untuk melaksanakan pembanding tersuai untuk memudahkan pengisihan objek. Pengendalian acara: Cipta sistem pengendalian acara dengan mendaftar dan mencetuskan penunjuk fungsi untuk acara. Fungsi panggil balik: Pindahkan kawalan ke fungsi lain, dan pulihkan kawalan pada masa yang sesuai untuk melaksanakan fungsi panggil balik.

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

Amalan penunjuk fungsi C++: menyelesaikan masalah pengaturcaraan biasa

Penunjuk fungsi ialah ciri berkuasa dalam C++, membenarkan fungsi diluluskan atau disimpan sebagai parameter. Dengan memahami konsep asas dan aplikasi praktikal penunjuk fungsi, anda boleh menyelesaikan pelbagai cabaran pengaturcaraan dengan berkesan.

Konsep asas

Penunjuk fungsi ialah penunjuk kepada fungsi. Jenisnya ialah penunjuk kepada fungsi yang nilai pulangan dan jenis parameternya ditentukan dalam pengisytiharan penunjuk. Contohnya:

typedef int (*FuncPtr)(int, int);
Salin selepas log masuk

Ini mengisytiharkan penunjuk kepada fungsi dengan jenis pengembalian int dan parameter int dan int.

Kes praktikal

1. Fungsi perbandingan**

Penunjuk fungsi boleh digunakan untuk membandingkan dua objek. Kod berikut menunjukkan cara menggunakan penunjuk fungsi untuk melaksanakan pembanding tersuai:

#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;
}
Salin selepas log masuk

Output:

Alice
Bob
Carol

Bob
Alice
Carol
Salin selepas log masuk

2. Pengendalian Acara**

Penunjuk fungsi boleh digunakan untuk mencipta sistem pengendalian acara. Contoh berikut menunjukkan cara menggunakan penuding fungsi untuk mendaftar dan mencetuskan peristiwa:

#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;
}
Salin selepas log masuk

Output:

Button clicked!
Salin selepas log masuk

3 Fungsi panggil balik**

Penunjuk fungsi boleh digunakan untuk melaksanakan fungsi panggil balik, membenarkan satu fungsi menyerahkan kawalan kepada. fungsi lain, dan Dapatkan semula kawalan apabila masa yang sesuai. Contoh berikut menunjukkan cara membuat fungsi panggil balik menggunakan penuding fungsi:

#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;
}
Salin selepas log masuk

Output:

Callback function called with argument: 10
Salin selepas log masuk

Atas ialah kandungan terperinci Petunjuk fungsi C++ dalam tindakan: menyelesaikan masalah pengaturcaraan biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!