Похоже, что вам может понадобиться:
template <typename BarType...>
Class Test
{
explicit Test(BarType ...bars)
{
FooFunction(bars.bar_member ...);
}
};
Самый распространенный способ использования пакета параметров - это расширить его, поместив представление того, что должно быть в каждом элементе списка, после чего следует жетон эллипса ...
.
Итак, если мы возьмем специализацию Test<B1, B2, B3>
, у него будет конструктор, подобный explicit Test(B1 b1, B2 b2, B3 b3);
, за исключением того, что имена b1
, b2
и b3
только что сделаны для объяснения. В этом теле функции возможны некоторые вещи, включающие в себя расширения пакета и то, что они будут создавать как:
std::make_tuple(bars...) -> std::make_tuple(b1, b2, b3)
std::tuple<BarType...> -> std::tuple<B1, B2, B3>
f(g(bars) ...) -> f(g(b1), g(b2), g(b3))
h<BarType>(bars)... -> h<B1>(b1), h<B2>(b2), h<B3>(b3)
Последний расширяет как пакет параметров шаблона BarType
, так и пакет параметров функции bars
вместе, сопоставляя вверх соответствующие элементы пакета.