В 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
или как он идеально передает аргументы.
Я ценю любые ответы!