У меня есть некоторые данные шаблона со следующим кодом:
uint idCounter = 0;
template <typename T>
class Foo : BaseFoo
{
static const uint FOO_ID;
}
template <typename T>
const uint Foo::FOO_ID = idCounter++;
Это дает каждой реализации Foo
уникальный идентификатор => Нет необходимости вводить идентификаторы вручную, а окончательный счетчик реализаций - это простозначение idCounter
.
Теперь я хочу сделать следующее:
std::vector<std::array<BaseFoo*, idCounter>>
// or
std::vector<BaseFoo*[idCounter]>
, а не:
std::vector<std::vector<BaseFoo*>>
Почему?
Мне нужно выровнять внутренние данные!Вектор просто выделяет пространство где-то, а не непосредственно внутри внешнего вектора.
Проблема:
Мы все знаем, что динамические массивы не разрешены (без вызова new),потому что idCounter
не является константным выражением.Но idCounter известен во время компиляции.Компилятор знает, сколько реализаций template Foo
используется в программе.И эта сумма не изменится во время выполнения.Я бы сказал, это известно во время компиляции.Или, может быть, после времени компиляции, но до времени выполнения;)
Вопрос:
Есть ли способ использовать какой-то шаблон, который позволяет мне делать то же самое, но смассив с выравниванием в памяти с таким размером?