Вы хотите:
struct Point {
double x,y;
};
struct Polygon {
private:
std::vector<Point> v;
public:
template<class ... Points>
Polygon(Points&& ... points) : v{std::forward<Points>(points)...} {}
};
все элементы пакета параметров расширены до вектор перегрузка конструктора, принимая список инициализатора.
и вызов ctor:
Polygon p = Polygon(Point{1,2},Point{2,3},Point{3,4});
EDIT
Как упомянул в комментарии NathanOliver, можно добавить некоторые SFINAE, чтобы обеспечить возможность вызова конструктора variadi c, только если все переданные аргументы являются экземплярами Point
,
template<
class ... Points,
std::enable_if_t< std::conjunction_v< std::is_same<Point,std::decay_t<Points> >... > >* = nullptr
>
Polygon(Points&& ... points) : v{std::forward<Points>(points)...} {}
Живая демоверсия