【发布时间】:2017-07-25 09:34:56
【问题描述】:
我正在查看 std::function 实现及其调用 operator()
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 的目的是什么?我很困惑:-)?
【问题讨论】:
-
‘它不是’ 不是吗?对我来说当然是这样。
-
声明是 std::function 和 templ.参数
Ret, ArgTypes已经修复 -
对我来说看起来像是类模板的部分特化的成员函数。我不确定你在哪里看到完整的专业化(完整的专业化将有空的模板参数列表)。
-
@Dmitry Kuznetsov 你是对的!
标签: c++ c++11 c++14 std-function perfect-forwarding