(не совсем) Динамический массив в C ++ - PullRequest
0 голосов
/ 09 июня 2018

У меня есть некоторые данные шаблона со следующим кодом:

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 используется в программе.И эта сумма не изменится во время выполнения.Я бы сказал, это известно во время компиляции.Или, может быть, после времени компиляции, но до времени выполнения;)

Вопрос:

Есть ли способ использовать какой-то шаблон, который позволяет мне делать то же самое, но смассив с выравниванием в памяти с таким размером?

...