2016-06-01 3 views
3

std::reference_wrapper here구현 :: reference_wrapper

생성자와 연산자의 구현을 보면서 나에게 분명하지만

template< class... ArgTypes > 
typename std::result_of<T&(ArgTypes&&...)>::type 
    operator() (ArgTypes&&... args) const { 
    return std::invoke(get(), std::forward<ArgTypes>(args)...); 
} 

누군가가 그것을 단순화 할 수

이 부분을 이해하지 못했다 나 ... 감사하겠습니다

편집 : operator()의 유용한 예를 std::reference_wrapper

+2

기본적으로'operator()'를 심판 Functor에게 전달합니다. – Jarod42

답변

3

operator() 멤버 함수를 정의하며, 이는 호출 가능 항목에 대한 참조를 래핑하는 std::reference_wrapper에 적용 할 수 있습니다. 그것의 목적은 기본 Callable을 호출하는 것입니다.

  • 템플릿 매개 변수 class ... Args은 기본 호출 가능 프로그램에 전달할 수있는 매개 변수로 일반화해야합니다.
  • 오퍼레이터의 리턴 타입은 리턴 타입이 typename std::result_of<T&(ArgTypes&&...)>::type 부에 의해 획득 된 호출 가능를 호출하여 생성되어야
  • 그것은 관계없이 작동 호출 가능 전화의 범용 방법으로서 invoke 호출을 사용 어떤 유형의 호출 가능인지 (Functor, 함수 포인터, 멤버 함수 포인터 등).
  • 을 얻기 위해 인수 목록을 전달하는 데 std::forward을 사용합니다. 예를 들어 원래 호출에 전달 된 lvalue 및 rvalues는 기본 호출에서 l/rvalue-ness를 유지합니다.
+0

std :: reference_wrapper의 operator()에 대한 예제를 제공 할 수 있습니까? – Laith