У меня есть функция, которая принимает переменные аргументы, упакованные в кортеж.
template <class... Args>
void Bottom(tuple<Args&&...> t)
{
}
Является ли Args&&
ссылкой для пересылки? т.е. будут ли применяться правила для свертывания ссылок или я просто добавляю && к каждому аргументу в пакете?
И скажем, я хочу вызвать эту функцию из функции, которая, безусловно, получает ссылки для пересылки:
template <class... Args>
void Top(Args&&... args) {
// 1. Bottom<Pack...>();
// 2. Bottom<Pack&&...>();
}
какой синтаксис будет лучше, если я не хочу изменять аргументы, 1 или 2?
РЕДАКТИРОВАТЬ
Я использую кортеж только для демонстрации класса, который упаковывает мои параметры. Фактические классы упаковки различаются на разных уровнях иерархии вызовов. Идея использовать using_fwd_as_tuple
в качестве ресурса, чтобы узнать, что библиотека делает в этом случае, крутая.