c ++のデリゲートとはどういう意味ですか?最後のパラメーターがデリゲートの形式であるため、比較関数/ファンクターを受け取るc / c ++のソート関数はありますか?
5 に答える
「デリゲート」は、実際にはC++の用語の一部ではありません。C#では、オブジェクトのアドレスを格納してメンバー関数を呼び出すこともできる、栄光に満ちた関数ポインターのようなものです。あなたは確かに小さなライブラリ機能としてC++でこのようなものを書くことができます。またはさらに一般的:と組み合わせboost::bind<>
ますboost::function<>
。
C ++では、「関数オブジェクト」という用語を使用します。関数オブジェクトは、関数呼び出しoperator()を介して「呼び出すことができる」もの(関数ポインターを含む)です。
std :: sortは、引数を変更せずブール値を返す特殊な関数オブジェクトである「述語」を取ります。
C ++のコールバック関数は、(大まかに)の形式として参照できますdelegates
(ただしdelegate
、この用語は使用されません)。コールバック関数は、関数へのポインターを使用して、それらをパラメーターとして他の関数に渡します。ただし、C#のデリゲートは、C++のコールバック関数に比べて高度です。
作業を委任するということは、作業負荷を他の人と共有することを意味します。実生活では、タスクを委任する場合、つまりマネージャーの場合は、他の人が方法を知らなくてもタスクを完了することを期待して、作業を共有することになります。
概念は、C++およびデリゲートの機能を持つ他の言語でも同じです。Cでは、これを代理人として見ることができます。
int calculate(int (*func)(int c), int a, int b)
あなたはポインタを送ることが期待されているので、あなたのためにいくつかの仕事を計算する別の関数に。私は最近、PythonとCの関数ポインターに関するブログ投稿を書きました。それをチェックしてください。役に立つかもしれません。これは、CまたはC ++で作業を委任するための「従来の」方法ではないかもしれませんが、繰り返しになりますが、用語は私が少し正しいと言っています。