2016-06-01 47 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()'轉發給裁判函子。 – Jarod42

回答

3

這定義了operator()成員函數,該函數適用於包含對Callable的引用的std::reference_wrapper。它的目的是調用底層的Callable。

  • 模板參數class ... Args是爲了使其通用於可傳遞給底層Callable的參數。
  • 操作者的返回類型必須被返回類型通過調用可調用,這是由typename std::result_of<T&(ArgTypes&&...)>::type部分所獲得產生
  • 它使用invoke呼叫作爲呼叫可贖回的通用方法,其中工程而不管它是什麼類型的Callable(函子,函數指針,成員函數指針等)。
  • 它使用std::forward來傳遞參數列表來實現perfect forwarding--例如傳遞給原始調用的左值和右值在底層調用中保留了它們的l/rvalue-ness。
+0

你可以給一個例子運算符()的std :: reference_wrapper – Laith