Если существует вероятность того, что данные могут быть сохранены в стеке, и если размер превышает пороговое значение, определяется только во время выполнения, тогда ваш тип будет иметь для включения некоторыхКонтейнер стека достаточно большой, чтобы вместить что-то пороговое значение размера (будь то std :: array или что-то еще), что делает вашу проблему
Я мог бы использовать std :: array, но это потратило бы впустую память.Я ожидаю, что мой порог будет порядка 2048.
неизбежно.Я не думаю, что есть способ обойти это.Например, в коде, подобном
uint32_t N = code_that_determines_size_at_runtime();
ThresholdContainer container(N);
, компилятор не может знать, находится ли N выше или ниже порогового значения.Таким образом, чтобы это работало, макет памяти для ThresholdContainer должен содержать память стека для данных вплоть до порогового размера, который был бы неиспользованным и потраченным впустую, когда N> threshold.(Соединение стека и памяти кучи с помощью некоторого итератора, который идет между ними, было бы ужасно, и вам, вероятно, нужна непрерывная память).
Если, с другой стороны, размер по сравнению с порогом известен во время компиляции,Вы можете определить класс, имеющий размер N, который по существу содержит std :: array, если N