C 中的委託是一種程式設計結構,可讓您將函數指標作為參數傳遞。這使您能夠創建可以非同步調用或在不同上下文中調用的回調。
在C 中實作委託有多種方法,包括:
函子是物件定義了一個operator()函數,有效地使它們可調用。
struct Functor { int operator()(double d) { return (int)d 1; } };
Lambda 表達式提供了用於內嵌建立委託的簡潔語法:
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 是標準C 模板,可以儲存任何可呼叫對象,包括lambda、仿函數、和函數指標。
#includestd::function f = [any of the above];
綁定允許您將參數部分應用於委託,方便呼叫成員函數:
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