Если бы T
был пакетом параметров, вы могли бы использовать следующий синтаксис для объявления функции, которая принимает последовательность параметров с типами, соответствующими типам в пакете параметров:
inline Class<T>::Test(const T&... t) { /* ... */ }
Однако этоПохоже, что T
не является пакетом параметров.Это просто параметр одного типа.Плюс, вы положили ...
в неправильном месте.Поэтому вы действительно объявили функцию, которая принимает один параметр типа T
, плюс многоточие в стиле C.(Да, запятая перед многоточием необязательна!)
Поэтому, когда вы пишете sizeof...(t)
, компилятор жалуется, потому что t
не является пакетом.Это просто обычный параметр.
Возможно, вы хотели объявить Test
функцией, которая принимает произвольное количество аргументов, но все типа const T&
?К сожалению, в C ++ нет простого способа сделать это.См. Указание одного типа для всех аргументов, передаваемых в функцию переменной или функцию шаблона переменной без использования массива, вектора, структур и т. Д. для решений.