2016-06-11 170 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. 函數體看起來很複雜。我希望通過分解每個部分來在語法上理解它。雖然看起來像lambda。
+0

成員函數指針和一個將其推遲到dispatch()調用的lambda函數。 –

回答

1
  1. 什麼呢(T :: *法)是什麼意思?我知道這裏的T是什麼。但從未見過類似*方法的東西。前面的*讓我感到困惑。
Future<R> (T::*method)() 

是名爲method一個成員函數指針參數。預計將獲得T成員函數的地址和簽名Future<R> func();

  1. 函數體看起來相當複雜。我希望通過分解每個部分來在語法上理解它。雖然看起來像lambda。

這是一個lambda函數調用,是的。 lambda體調用dispatch()並傳遞參數pidmethod

+0

好的。但是[=]()是什麼意思? – soupybionics

+1

這是_by copy capture default_,如[這裏]所述(http://en.cppreference.com/w/cpp/language/lambda)。請花費更多的精力閱讀可用的文檔(這是一種很好的方式來告訴你RTFM)。順便說一句,我沒有DV你的問題。 –