質問

C++のデリゲートとはどういう意味ですか?最後のパラメータとして比較関数/ファンクターを取るC/C++のソート関数はデリゲートの形式ですか?

役に立ちましたか?

解決

「デリゲート」本当にC ++の用語の一部ではありません。 C#ではメンバ関数を呼び出すことも、オブジェクトのアドレスを格納することができる見せかけ関数ポインタのようなものです。あなたは確かに小さなライブラリ機能としてC ++でこのような何かを書くことができます。あるいはもっと一般的な:。boost::bind<>boost::function<>を組み合わせる

は、C ++では、私たちは、用語「関数オブジェクト」を使用します。関数呼び出し演算子()。

を経由して「呼び出し可能」であるもの(関数ポインタを含む)された関数オブジェクト

のstd ::ソートその引数を修正し、ブール値を返していない特殊な関数オブジェクトである「述語」をとります。

他のヒント

C ++でのコールバック関数は、(緩く)とすることができる(delegates用語はこのために使用されていないが)delegateの形態と称します。コールバック関数は、他の関数へのパラメータとして渡すために関数へのポインタを使用します。 しかし、C#での代表団は、C ++でのコールバック関数に比べ、より高度である。

仕事を委任するには他の人と作業負荷を共有することを意味します。実際の生活の中で、あなたがマネージャである場合、すなわち、あなたがどのように知らなくても、タスクを完了するために他人を期待し、あなたの作品を共有することになる。

、あなたのタスクを委任した場合

の概念はC ++と委譲する能力を有する任意の他の言語と同じです。 Cでは、代理人としてこれを見ることができます:

int calculate(int (*func)(int c), int a, int b)

あなたはあなたのためのいくつかの作業を計算します別の関数に、ポインターを送信することが期待されているため。私は最近、<のhref = "http://blog.smartit.se/2009/11/30/function-pointers-in-c-and-python-and-their-possible-usage/" のrel = "nofollowを書きましたnoreferrer "> PythonとCで関数ポインタのブログ記事で、それをチェックアウトし、あなたはそれを参考になっ見つけるかもしれません。これは、CまたはC ++での作業を委任する「伝統的な」方法ではないかもしれませんが、その後、再び、termonoligyは私が少し右ます。

だと言います

代表団 主に、クラスに埋め込まれた機能 (pimpl、集約、プライベート継承) に関数を渡す方法として使用されます。これらは主に 1 行の (インライン化された) 関数であり、メンバークラスの関数を呼び出します。私の知る限り、これは C# のデリゲートとは何の関係もありません。

この意味で、qsort で使用される関数ポインターはデリゲートではなく、ユーザー ソフトウェアによってフレームワーク モジュールを拡張できるコールバックです。 ハリウッドの原則.

の委任:サブスクリプション・システムとマルチファンクションポインターのように作用するオブジェクト。それは実際にコールバック通知とイベント処理のための静的または「オブジェクトのメンバ関数ポインタの使用を簡素化します。

こののリンクはに代表団を説明します明快なやり方か、また、 MSDN リンクます。

scroll top