関数ポインターとコールバック関数はどちらもコールバック メカニズムを実装するためのツールです。関数ポインタはコンパイル時に作成され、変更できず、明示的に呼び出す必要があります。コールバック関数は実行時に作成され、異なる関数に動的にバインドして、コールバック関数によって自動的に呼び出すことができます。したがって、関数ポインターは静的コールバックに適しており、コールバック関数は動的コールバックに適しています。
関数ポインターとコールバック関数はどちらも、C でコールバック メカニズムを実装するために使用される強力なツールです。
関数ポインタ
コールバック関数
異なる時間に異なるタスクを実行する必要があるアプリケーションを考えてみましょう。この機能は、次のコードを使用して実現できます。
#include <iostream> // 定义一个打印消息的函数 void print_message(const char* message) { std::cout << message << std::endl; } // 定义一个接受函数指针参数的回调函数 void execute_callback(void (*callback)(const char*)) { callback("Hello world!"); } int main() { // 使用函数指针调用回调函数 execute_callback(print_message); // 动态创建并调用回调函数 auto lambda = [](const char* message) { std::cout << "[Lambda] " << message << std::endl; }; execute_callback(lambda); return 0; }
この例では、print_message
は静的コールバックの関数ポインターです。ラムダ式 lambda
は、実行時に作成され、execute_callback
にバインドされる動的コールバックです。
機能 | 関数ポインター | コールバック関数 |
---|---|---|
作成タイミング | コンパイル時間 | 実行時間 |
変更不可 | 変更可能 | |
明示的 | 自動 | |
静的 | 動的 |
以上がC++ 関数ポインターとコールバック関数の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。