関数ポインタは、次のような C プログラミングの課題を解決する強力な方法を提供します。 比較関数: 関数ポインタを使用してカスタム コンパレータを実装し、オブジェクトの並べ替えを容易にします。イベント処理: イベントをトリガーするポインターと関数ポインターを登録することで、イベント処理システムを作成します。コールバック関数: 制御を他の関数に転送し、適切なタイミングで制御を復元してコールバック関数を実装します。
C 関数ポインタの実践: 一般的なプログラミングの問題の解決
関数ポインタは C の強力な関数であり、関数を使用できるようになります。パラメータとして配信または保存します。関数ポインターの基本概念と実際の応用を理解することで、プログラミングのさまざまな課題を効果的に解決できます。
基本概念
関数ポインターは関数へのポインターです。その型は、戻り値とパラメータの型がポインタ宣言で指定されている関数へのポインタです。例:
typedef int (*FuncPtr)(int, int);
これは、戻り値の型が int でパラメータが int および int である関数へのポインタを宣言します。
実践例
関数ポインタは 2 つのオブジェクトを比較するために使用できます。次のコードは、関数ポインターを使用してカスタム コンパレーターを実装する方法を示しています:
#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; }
出力:
Alice Bob Carol Bob Alice Carol
#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; }
Button clicked!
#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; }
Callback function called with argument: 10
以上がC++ 関数ポインターの動作: 一般的なプログラミングの問題の解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。