【发布时间】:2020-04-08 02:44:27
【问题描述】:
在 C++ 中,似乎可以在参数包名称之后直接使用... 扩展参数。例如,
template <class... Tys>
void function(Tys... params) {
function(params...);
}
但是,当使用std::forward 时,... 似乎在参数包的名称之后。例如,
template <class... Tys>
void function(Tys... params) {
function(std::forward<Tys>(params)...); // The '...' is outside the parenthesis of 'params'
}
我的问题是为什么会有区别?为什么下面的代码不正确?
template<class... Tys>
void function(Tys... params) {
function(std::forward<Tys>(params...));
}
参数包中的哪一点展开?我可能不完全理解 std::forward 的工作原理或它如何完美地转发参数。
感谢任何答案!
【问题讨论】:
-
理解转发相关阅读:Advantages of using forward
标签: c++ templates variadic-templates variadic-functions perfect-forwarding