Rumah >pembangunan bahagian belakang >C++ >Petunjuk fungsi C++ dalam tindakan: menyelesaikan masalah pengaturcaraan biasa
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.
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);
Ini mengisytiharkan penunjuk kepada fungsi dengan jenis pengembalian int dan parameter int dan int.
Kes praktikal
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; }
Output:
Alice Bob Carol Bob Alice Carol
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; }
Output:
Button clicked!
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; }
Output:
Callback function called with argument: 10
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!