我一直在寻找在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