使用 std::forward 的参数包扩展的“...”语法
Syntax of '...' with Parameter Pack Expansion using std::forward
在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
的工作原理或它如何完美地转发参数。
感谢您的回答!
...
适用于它左边的东西。
function(params...)
扩展到
function(param1, param2, ..., paramN)
。
function(std::forward<Tys>(params)...)
扩展到
function(std::forward<Tys1>(param1), std::forward<Tys2>(param2), ..., std::forward<TysN>(paramN))
function(std::forward<Tys>(params...))
扩展到
function(std::forward<Tys>(param1, param2, ..., paramN))
在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
的工作原理或它如何完美地转发参数。
感谢您的回答!
...
适用于它左边的东西。
function(params...)
扩展到
function(param1, param2, ..., paramN)
。function(std::forward<Tys>(params)...)
扩展到
function(std::forward<Tys1>(param1), std::forward<Tys2>(param2), ..., std::forward<TysN>(paramN))
function(std::forward<Tys>(params...))
扩展到
function(std::forward<Tys>(param1, param2, ..., paramN))