> 백엔드 개발 > C++ > 본문

선택 시기: std::bind와 C 0x의 Lambda?

Mary-Kate Olsen
풀어 주다: 2024-10-30 15:21:12
원래의
1031명이 탐색했습니다.

When to Choose: std::bind vs. Lambdas in C  0x?

비교 및 대조: C 0x의 std::bind 및 Lambda

C 0x에서 프로그래머는 함수: std::bind 및 람다. 둘 다 서로 다른 목적으로 사용되지만 일부 응용 프로그램에서는 겹칩니다. 교차 기능의 예를 들어 각 접근 방식의 장점과 한계를 살펴보겠습니다.

주사위 굴리기 기능을 만드는 작업을 생각해 보세요. 람다를 사용하면 다음과 같이 표현할 수 있습니다.

<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>
로그인 후 복사

또는 std::bind를 사용하면 다음과 같이 쓸 수 있습니다.

<code class="cpp">auto dice = bind(distribution, engine);</code>
로그인 후 복사

단형 대 다형

한 가지 근본적인 차이점은 유형 동작에 있습니다. 람다는 단일형입니다. 즉, 컴파일 타임에 결정되는 고정된 인수 유형을 가집니다. 이 제약 조건은 바인드 대응 항목에 비해 람다의 유연성을 제한합니다.

예를 들어 두 개의 인수를 인쇄하는 함수를 생각해 보세요.

<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }
로그인 후 복사

이 람다를 다른 매개 변수 유형과 함께 사용하면 컴파일러 오류. 이와 대조적으로 std::bind는 다형성 동작을 허용하여 함수를 다양한 유형의 인수에 바인딩할 수 있습니다.

<code class="cpp">struct foo {
  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);</code>
로그인 후 복사

함수가 호출될 때까지 유형 추론을 연기함으로써 std::bind는 더 큰 유연성을 제공합니다. 다양한 입력 유형을 처리합니다.

위 내용은 선택 시기: std::bind와 C 0x의 Lambda?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿