2016-06-11 171 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你的问题。 –