0

c ++のデリゲートとはどういう意味ですか?最後のパラメーターがデリゲートの形式であるため、比較関数/ファンクターを受け取るc / c ++のソート関数はありますか?

4

5 に答える 5

5

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

C ++では、「関数オブジェクト」という用語を使用します。関数オブジェクトは、関数呼び出しoperator()を介して「呼び出すことができる」もの(関数ポインターを含む)です。

std :: sortは、引数を変更せずブール値を返す特殊な関数オブジェクトである「述語」を取ります。

于 2009-12-22T07:30:56.997 に答える
2

C ++のコールバック関数は、(大まかに)の形式として参照できますdelegates(ただしdelegate、この用語は使用されません)。コールバック関数は、関数へのポインターを使用して、それらをパラメーターとして他の関数に渡します。ただし、C#のデリゲートは、C++のコールバック関数に比べて高度です。

于 2009-12-22T07:28:15.857 に答える
2

作業を委任するということは、作業負荷を他の人と共有することを意味します。実生活では、タスクを委任する場合、つまりマネージャーの場合は、他の人が方法を知らなくてもタスクを完了することを期待して、作業を共有することになります。

概念は、C++およびデリゲートの機能を持つ他の言語でも同じです。Cでは、これを代理人として見ることができます。

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

あなたはポインタを送ることが期待されているので、あなたのためにいくつかの仕事を計算する別の関数に。私は最近、PythonとCの関数ポインターに関するブログ投稿を書きました。それをチェックしてください。役に立つかもしれません。これは、CまたはC ++で作業を委任するための「従来の」方法ではないかもしれませんが、繰り返しになりますが、用語は私が少し正しいと言っています。

于 2009-12-22T07:32:16.207 に答える
1

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

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

于 2009-12-22T08:39:40.627 に答える
0

Delegate:サブスクリプションシステムで多機能ポインタのように機能するオブジェクト。これにより、コールバック通知とイベント処理のための静的または「オブジェクト」メンバー関数ポインターの使用が実際に簡素化されます。

このリンクは、参加者をわかりやすく説明しています。または、MSDNリンクを参照することもできます。

于 2009-12-22T07:30:37.623 に答える