http://www.codeproject.com/KB/cpp/fastdelegate2.aspx
上記の記事の導入部の 2 番目の段落では、次のように述べています。.. わかりませんか?実際にオブジェクトとメンバー関数をコピーして保存する必要がありますか? メンバー関数のアドレスを格納するだけではありませんか?
http://www.codeproject.com/KB/cpp/fastdelegate2.aspx
上記の記事の導入部の 2 番目の段落では、次のように述べています。.. わかりませんか?実際にオブジェクトとメンバー関数をコピーして保存する必要がありますか? メンバー関数のアドレスを格納するだけではありませんか?
Boost.Function は、生の関数ポインタよりも一般的で強力です。特定のシグネチャで呼び出し可能なものなら何でも格納できます。ただし、その柔軟性に関連してストレージと実行時間にコストがかかります。
Boost.FunctionドキュメントのMiscellaneous Notesセクションでは、これについてもう少し詳しく説明していますが、要約すると:
そうは言っても、私は Boost.Function を広範囲に使用してきましたが、プロファイリング時にストレージまたはランタイムのコストが実際に表示される状況は一度もありませんでした.
いいえ、メソッドへのポインターだけでメンバー関数を呼び出すことはできません。その理由は、メソッドが呼び出されるオブジェクトであるコンテキスト( ) 内でメソッドが呼び出されるためです。this
メンバー関数ポインターしかない場合、メソッドをどのオブジェクトに適用する必要があるかわかりません。ただし、メンバー関数が の場合、静的メンバー関数はオブジェクトをインスタンス化せずに呼び出すことができるため、コンテキストstatic
はありません。
したがって、メンバー関数を呼び出すには、関数へのポインターに加えて、メンバー関数の呼び出しが行われるコンテキストを定義するオブジェクトへの参照が必要です。
これはあなたの質問に答えていますか?