Я пытаюсь написать класс контейнера для векторной арифметики. Объекты являются статическими по величине:Как инициализировать класс типа std :: array
template<typename T, unsigned N>
class vec{
T data[N] = {0};
public:
vec(std::initializer_list<T> ini){
std::copy(ini.begin(), ini.end(), data);
}
}
Вот как далеко я добрался.
Но чем я тестировал класс std :: array для сравнения, и я заметил, что он каким-то образом мог бы сделать статическое утверждение, если список инициализаторов был длинным или коротким.
std::array<float, 2> a = {1, 2, 3, 4} <- instant error message from the visual studio ide
В моем классе мне пришлось бы проверять длину списка инициализаторов во время выполнения.
Я предполагаю, что класс std :: array каким-то образом управляет им, чтобы напрямую инициализировать данные с помощью нотации списка инициализаторов без класса std :: initializer_list.
Возможно ли инициализировать мой класс так же, как std :: array?
Одна из причин, по которой ваш vec не позволит, это факт, что данные T [n] являются частными ... делают его общедоступным, а затем избавляются от конструктора. Кроме того, ваша примерная строка для std :: array выше компилируется, если вы включаете закрытие; – JVene