Я хочу создать объект std::array<T, N>
, но проблема в том, что я могу использовать только функции, возвращающие тип constexpr
, или компилятор будет жаловаться. Проблема здесь заключается в том, что мне нужно, чтобы вычислить длину этого массива на основе размера другого массива, который может быть что-то вроде этого:создание std :: array с размером, вычисленным во время выполнения
template <typename T>
struct DataLength
{
template <typename iter>
size_t maxPossibleLength(iter begin, iter end)
{
size_t m_size = 0;
while (begin != end) {
m_size = m_size << 8 | std::numeric_limits<T>::max(); /* 0xff for uchar*/
begin++;
}
return m_size;
}
}
как я могу преобразовать вывод этой функции, так что я могу использовать его вместо N
?
'STD :: array' должно быть известно во время компиляции. Массив размера времени выполнения - 'std :: vector'. –
Как T.C. говорит, ответ на ваш вопрос: «Вы не можете создать' std :: array' с размером, рассчитанным во время выполнения ». Вы можете использовать 'std :: vector' или дать нам дополнительную информацию о проблеме, которую вы пытаетесь решить, поэтому мы можем предложить альтернативные подходы. – Casey
было бы неплохо указать причину понижения голосов. В моем вопросе нет проблем, проблема заключается в возможностях языка C++. – Barracuda