Если по какой-то причине вы действительно хотите инициализировать вектор, используя массив в стиле C, а не std::initializer_list
, вы можете сделать это, используя дополнительный уровень косвенности:
struct A {
template<std::size_t n>
A(const int (&arr)[n]) :
A(arr, std::make_index_sequence<n>{})
{ }
template<std::size_t... is>
A(const int (&arr)[sizeof...(is)], std::index_sequence<is...>) :
mvec{arr[is]...}
{ }
std::vector<int> mvec;
};
A a({1, 2, 3});
Редактировать. Как указано в комментарии Франсуа Андрие , std::vector
можно инициализировать с помощью пары итераторов, поэтому конструктор упрощается до:
template<std::size_t n>
A(const int (&arr)[n]) : mvec(arr, arr + n)
{ }
Но если вы инициализировали, например, std::array
вместо std::vector
, трюк index_sequence
кажется неизбежным.