コールバック関数とは
2791 ワード
JAvaのコールバック方法(分かりやすい説明分析)
1.まずコールバックメソッドの概念は「構築メソッド」の概念とは異なり、java内の特定の意味や用途を持つメソッドを指すわけではありません.2.メソッドと呼ばれるコールバックは、メソッドの呼び出し方法を指します.いずれの「コールバック」メソッドも、「コールバックメソッド」と呼ぶことができます. 3.メソッドのコールバックは、通常、javaインタフェースと抽象クラスの使用中に発生します.
インタフェース名がAinterfaceで、メソッド名がtest()であると仮定します. このインタフェースを実装したクラスMyclass、すなわちtest()という方法を実装したに違いない. もう1つのクラスOtherClassメソッドcallback(Ainterface ai)があり、callbackメソッドがaiのtest()メソッドを呼び出します. ここで、MyclassのインスタンスmyClassを使用して、callback(Ainterface ai)メソッドにパラメータとして持ち込み、callbackメソッドがmyClassのtest()メソッドをコールバックしたと言います. このように説明してはっきりしないことを知らない.実際にコールバックはOOの中の1つの“精華”の概念で、javaの抽象、継承などのプログラミングの理念を発揮しました.閻宏博士の「javaとモード」を参考にすることをお勧めします.
Javaのcallbackはインタフェースによって実現される. 例: 1.class A,class B 2.class A実装インタフェースOperate 3.class Bはoperateインタフェースタイプの関数test(Operate)を持つ o) 4.クラスまたはclass Bがclass Bのtest関数を呼び出し、class Aのインスタンスをパラメータとして入力する 5.class BがAを取得し、Aが実現したoperateインタフェースのメソッドを随時コールバックできる
----------------------------------------------------------------------------------------------------------------------------
何があったの? (専門解説分析)
コールバック関数は、関数ポインタで呼び出される関数です.関数のポインタ(アドレス)をパラメータとして別の関数に渡され、このポインタが指向する関数を呼び出すために使用される場合、これはコールバック関数であると言います.コールバック関数は、関数の実装者によって直接呼び出されるのではなく、特定のイベントまたは条件が発生したときに、イベントまたは条件に応答するために別の側によって呼び出されます.
コールバック関数の実現メカニズムは
(1)コールバック関数を定義する.
(2)関数実装を提供する側は初期化時にコールバック関数の関数ポインタを呼び出し者に登録する.
(3)特定のイベントや条件が発生した場合,呼び出し者は関数ポインタを用いてコールバック関数を呼び出してイベントを処理する.
コールバック関数を使用する理由
呼び出し者と呼び出し者を分けることができるからです.呼び出し者は誰が呼び出し者なのか気にしないで、すべて知っておく必要があります.特定のプロトタイプ、いくつかの制限条件(例えば、戻り値int)を持つ呼び出された関数があるだけです.
コールバック関数が実際にどのような役割を果たしているかを知りたい場合は、まずこのような状況を想定して、バブルソート、高速ソート、shellソート、shakeソートなどのいくつかのソートアルゴリズムの実装を提供するライブラリを作成しますが、ライブラリをより汎用化するために、関数にソートロジックを埋め込みたくなく、使用者に対応するロジックを実現させます.ライブラリを複数のデータ型(int、float、string)に使用できるようにしたい場合、どうすればいいですか?関数ポインタを使用してコールバックできます.
コールバックは、通知メカニズムに使用できます.たとえば、プログラムにタイマを設定する場合があります.一定時間になると、プログラムは相応の通知を受けますが、通知メカニズムの実装者は私たちのプログラムについて何も知りません.この場合、特定のプロトタイプの関数ポインタが必要です.このポインタでコールバックを行い、私たちのプログラムイベントが発生したことを通知します.実際には、SetTimer()APIは、タイマに通知するためにコールバック関数を使用します.また、コールバック関数が指定されていない場合、プログラムのメッセージキューにメッセージを送信します.
コールバックメカニズムを使用する別のAPI関数は、画面上のすべての最上位レベルのウィンドウを列挙し、各ウィンドウにプログラムが提供する関数を呼び出し、ウィンドウのハンドラを渡すEnumWindow()です.呼び出し元が値を返すと、反復を続行します.そうしないと、終了します.EnumWindow()呼び出し元がどこにあるかは気にしないし、呼び出し元が渡したプロセッサが何をしたかも気にしない.戻り値に基づいて実行または終了するため、戻り値だけが気になる.
いずれにしても、コールバック関数はC言語から継続されるので、C++では、Cコードとインタフェースを確立したり、既存のコールバックインタフェースと付き合ったりする場合にのみコールバック関数を使用する必要があります.上記の場合を除き、コールバック関数ではなく、C++で仮想メソッドまたは関数記号(functor)を使用する必要があります.
1.まずコールバックメソッドの概念は「構築メソッド」の概念とは異なり、java内の特定の意味や用途を持つメソッドを指すわけではありません.2.メソッドと呼ばれるコールバックは、メソッドの呼び出し方法を指します.いずれの「コールバック」メソッドも、「コールバックメソッド」と呼ぶことができます. 3.メソッドのコールバックは、通常、javaインタフェースと抽象クラスの使用中に発生します.
インタフェース名がAinterfaceで、メソッド名がtest()であると仮定します. このインタフェースを実装したクラスMyclass、すなわちtest()という方法を実装したに違いない. もう1つのクラスOtherClassメソッドcallback(Ainterface ai)があり、callbackメソッドがaiのtest()メソッドを呼び出します. ここで、MyclassのインスタンスmyClassを使用して、callback(Ainterface ai)メソッドにパラメータとして持ち込み、callbackメソッドがmyClassのtest()メソッドをコールバックしたと言います. このように説明してはっきりしないことを知らない.実際にコールバックはOOの中の1つの“精華”の概念で、javaの抽象、継承などのプログラミングの理念を発揮しました.閻宏博士の「javaとモード」を参考にすることをお勧めします.
Javaのcallbackはインタフェースによって実現される. 例: 1.class A,class B 2.class A実装インタフェースOperate 3.class Bはoperateインタフェースタイプの関数test(Operate)を持つ o) 4.クラスまたはclass Bがclass Bのtest関数を呼び出し、class Aのインスタンスをパラメータとして入力する 5.class BがAを取得し、Aが実現したoperateインタフェースのメソッドを随時コールバックできる
。 ( ) ,
, 。 , ,
。
----------------------------------------------------------------------------------------------------------------------------
何があったの? (専門解説分析)
コールバック関数は、関数ポインタで呼び出される関数です.関数のポインタ(アドレス)をパラメータとして別の関数に渡され、このポインタが指向する関数を呼び出すために使用される場合、これはコールバック関数であると言います.コールバック関数は、関数の実装者によって直接呼び出されるのではなく、特定のイベントまたは条件が発生したときに、イベントまたは条件に応答するために別の側によって呼び出されます.
コールバック関数の実現メカニズムは
(1)コールバック関数を定義する.
(2)関数実装を提供する側は初期化時にコールバック関数の関数ポインタを呼び出し者に登録する.
(3)特定のイベントや条件が発生した場合,呼び出し者は関数ポインタを用いてコールバック関数を呼び出してイベントを処理する.
コールバック関数を使用する理由
呼び出し者と呼び出し者を分けることができるからです.呼び出し者は誰が呼び出し者なのか気にしないで、すべて知っておく必要があります.特定のプロトタイプ、いくつかの制限条件(例えば、戻り値int)を持つ呼び出された関数があるだけです.
コールバック関数が実際にどのような役割を果たしているかを知りたい場合は、まずこのような状況を想定して、バブルソート、高速ソート、shellソート、shakeソートなどのいくつかのソートアルゴリズムの実装を提供するライブラリを作成しますが、ライブラリをより汎用化するために、関数にソートロジックを埋め込みたくなく、使用者に対応するロジックを実現させます.ライブラリを複数のデータ型(int、float、string)に使用できるようにしたい場合、どうすればいいですか?関数ポインタを使用してコールバックできます.
コールバックは、通知メカニズムに使用できます.たとえば、プログラムにタイマを設定する場合があります.一定時間になると、プログラムは相応の通知を受けますが、通知メカニズムの実装者は私たちのプログラムについて何も知りません.この場合、特定のプロトタイプの関数ポインタが必要です.このポインタでコールバックを行い、私たちのプログラムイベントが発生したことを通知します.実際には、SetTimer()APIは、タイマに通知するためにコールバック関数を使用します.また、コールバック関数が指定されていない場合、プログラムのメッセージキューにメッセージを送信します.
コールバックメカニズムを使用する別のAPI関数は、画面上のすべての最上位レベルのウィンドウを列挙し、各ウィンドウにプログラムが提供する関数を呼び出し、ウィンドウのハンドラを渡すEnumWindow()です.呼び出し元が値を返すと、反復を続行します.そうしないと、終了します.EnumWindow()呼び出し元がどこにあるかは気にしないし、呼び出し元が渡したプロセッサが何をしたかも気にしない.戻り値に基づいて実行または終了するため、戻り値だけが気になる.
いずれにしても、コールバック関数はC言語から継続されるので、C++では、Cコードとインタフェースを確立したり、既存のコールバックインタフェースと付き合ったりする場合にのみコールバック関数を使用する必要があります.上記の場合を除き、コールバック関数ではなく、C++で仮想メソッドまたは関数記号(functor)を使用する必要があります.