У меня есть шаблонный класс, который содержит один массив членов постоянной длины во время компиляции.Я хочу, чтобы этот массив был постоянным, но его инициализация на основе данных, предоставленных конструктором, оказывается трудной:
struct Input {
int value;
};
template<size_t Size>
struct Foo {
int const myVals[Size];
Foo(std::array<Input, Size> const &in)
: myVals{ in[0].value, in[1].value, /* How many times? */ } {
}
}
Поскольку я не знаю размер массива, я не знаю, сколько значенийс помощью которого нужно инициализировать myVals
.Следующий код работает, но я задаюсь вопросом, является ли это лучшим подходом:
template<size_t Size>
struct Foo {
std::array<int, Size> const myVals;
Foo(std::array<Input, Size> const &in)
: myVals{ toIntArray(in) } {
}
private:
static std::array<int, Size> toIntArray(std::array<Input, Size> const &in) {
std::array<int, Size> result;
for (size_t i{ 0 }; i < Size; ++i) {
result[i] = in[i].value;
}
return result;
}
}
Существует ли более краткий или общепринятый способ заполнения значений массива константных членов?