C のデリゲートは、関数ポインターを引数として渡すことができるプログラミング構造です。これにより、非同期または異なるコンテキストで呼び出すことができるコールバックを作成できます。
C でデリゲートを実装するには、次のようなさまざまなアプローチがあります。
ファンクターはオブジェクトですこれは、operator() 関数を定義し、実質的に呼び出し可能にします。
struct Functor { int operator()(double d) { return (int)d 1; } };
ラムダ式は、デリゲートをインラインで作成するための簡潔な構文を提供します:
auto func = [](int i) -> double { return 2 * i / 1.15; };
直接関数ポインターを使用してデリゲートを表すことができます:
int f(double d) { ... } typedef int (*MyFuncT)(double d);
メンバー関数へのポインターは、クラス メンバーのデリゲートを迅速に作成する方法を提供します:
struct DelegateList { int f1(double d) { } int f2(double d) { } }; typedef int (DelegateList::* DelegateType)(double d);
std::function は、ラムダ、ファンクター、および関数ポインター。
#includestd::function f = [any of the above];
Binding を使用すると、引数をデリゲートに部分的に適用できます。メンバー関数を呼び出すのに便利です:
struct MyClass { int DoStuff(double d); // actually (MyClass* this, double d) }; std::functionf = std::bind(&MyClass::DoStuff, this, std::placeholders::_1);
テンプレートは受け入れることができます引数リストに一致する任意の呼び出し可能オブジェクト:
templateint DoSomething(FunctionT func) { return func(3.14); }
デリゲートは、コードの柔軟性と保守性を強化できる C の多用途ツールです。特定のニーズに合わせて適切なデリゲート アプローチを選択することで、関数をパラメータとして効果的に渡し、コールバックを処理し、C で非同期プログラミングを実装できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3