"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 위임자가 C++ 코드의 유연성과 유지 관리성을 어떻게 향상시킬 수 있습니까?

위임자가 C++ 코드의 유연성과 유지 관리성을 어떻게 향상시킬 수 있습니까?

2024년 11월 19일에 게시됨
검색:185

How Can Delegates Enhance Flexibility and Maintainability in C   Code?

C에서 대리자의 다양한 개념 설명

C의 대리자는 함수 포인터를 인수로 전달할 수 있는 프로그래밍 구조입니다. 이를 통해 비동기적으로 또는 다른 컨텍스트에서 호출할 수 있는 콜백을 만들 수 있습니다.

C에서 대리자를 구현하는 데는 다음을 포함하는 다양한 접근 방식이 있습니다.

펑터

펑터는 객체입니다. 이는 연산자() 함수를 정의하여 효과적으로 호출 가능하게 만듭니다.

struct Functor {
    int operator()(double d) {
        return (int)d   1;
    }
};

Lambda 표현식(C 11 이상)

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

std::function은 람다, 펑터, 및 함수 포인터.

#include 
std::function f = [any of the above];

Binding(std::bind 사용)

Binding을 사용하면 위임자에 인수를 부분적으로 적용할 수 있습니다. 멤버 함수를 호출하는 데 편리합니다.

struct MyClass {
    int DoStuff(double d); // actually (MyClass* this, double d)
};
std::function f = std::bind(&MyClass::DoStuff, this, std::placeholders::_1);

템플릿

템플릿은 허용 가능 인수 목록과 일치하는 콜러블:

template 
int DoSomething(FunctionT func) {
    return func(3.14);
}

델리게이트는 코드의 유연성과 유지 관리성을 향상시킬 수 있는 C의 다용도 도구입니다. 특정 요구 사항에 맞는 적절한 대리자 접근 방식을 선택하면 함수를 매개 변수로 효과적으로 전달하고, 콜백을 처리하고, C에서 비동기 프로그래밍을 구현할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3