2016-06-11 2 views
-2
template <typename R, typename T> 
Deferred<Future<R>()> defer(const PID<T>& pid, Future<R> (T::*method)()) 
{ 
    return Deferred<Future<R>()>([=]() { return dispatch(pid, method); }); 
} 
  1. 무엇이 (T::*method)입니까? 여기 T이 무엇인지 압니다. 그러나 *method과 같은 것을 본 적이 없습니다. 앞의 *은 혼란 스럽습니다.
  2. 함수 본문이 꽤 복잡해 보입니다. 각 부분을 분해하여 구문 론적으로 이해하고 싶습니다. 그래도 람다처럼 보입니다.
+0

멤버 함수 포인터와 그것을'dispatch()'호출에 맡기는 람다 함수. –

답변

1
  1. 무엇 (T는 : * 방법)을 의미? 나는 T가 뭔지 알아. 그러나 * 방법과 같은 것을 결코 보지 못했습니다. 앞의 *는 저를 혼란스럽게합니다.
Future<R> (T::*method)() 

method라는 멤버 함수 포인터 파라미터이다. Future<R> func();이라는 회원 함수의 주소를 T으로 가져올 것으로 예상됩니다.

  1. 함수 본문이 꽤 복잡해 보입니다. 각 부분을 분해하여 구문 론적으로 이해하고 싶습니다. 그래도 람다처럼 보입니다.

람다 함수 호출입니다. 그렇습니다. 람다 본문은 dispatch()을 호출하고 pidmethod 매개 변수를 전달합니다.

+0

확인. 그러나 [=]()는 무엇을 의미합니까? – soupybionics

+1

[here] (http://en.cppreference.com/w/cpp/language/lambda)에서 설명한대로 _by copy capture_ default_입니다. 사용 가능한 문서를 읽는 것에 대해 더 많은 노력을 기울였습니다 (RTFM을 알려주는 아주 좋은 방법입니다). 나는 DV라는 질문을하지 않았다. –