비교 및 대조: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!