我一直在尋找在std::function
執行和它的呼叫operator()
在std :: function運算符()和std :: forward中發生了什麼?
template<typename Ret, typename... ArgTypes>
Ret function< Ret (ArgTypes...)>::operator()(ArgTypes...args) const
{
// some stuff
return invoker(functor, std::forward<ArgTypes>(args)...);
}
我特別想知道,爲什麼它使用std::forward
這裏?這是否與完美的轉發有關? 因爲完美的轉發只能在operator()
是一個帶可變參數模板聲明的模板template<typename... Args>
(它不是,聲明是std :: function的部分特化)。 這裏使用std :: forward的意圖是什麼?我很困惑 :-)?
'*它不是*'不是嗎?當然看起來對我來說。 – Biffen
該聲明是std :: function和templ的完全專業化。參數'Ret,ArgTypes'已經修復 – Gabriel
看起來像一個類模板的部分專業化的成員函數給我。我不確定你在哪裏看到完整的專業化(完全專業化會有空的模板參數列表)。 – 2017-03-05 15:51:47