C의 대리자는 함수 포인터를 인수로 전달할 수 있는 프로그래밍 구조입니다. 이를 통해 비동기적으로 또는 다른 컨텍스트에서 호출할 수 있는 콜백을 만들 수 있습니다.
C에서 대리자를 구현하는 데는 다음을 포함하는 다양한 접근 방식이 있습니다.
펑터는 객체입니다. 이는 연산자() 함수를 정의하여 효과적으로 호출 가능하게 만듭니다.
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은 람다, 펑터, 및 함수 포인터.
#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