Возможно ли объявить (на ходу) вектор заданной размерности?

Допустим программа, во время ее исполнения, получает некоторое числовое значение N, по которому следует "построить" вектор N размерности (то бишь ::std::vector<::std::vector<...::std::vector<T>...>). Можно ли как-то это реализовать и, если возможно, то как? Может если для данного примера с vector это никак не сделать, то с помощью чего можно реализовать такую идею? Я предполагаю, должно быть что-то в духе:

template<int Size, typename T>  
decltype(auto) outType()  
{  
    if (Size <= 0) return ::std::vector<T>();  
    return outType<Size - 1, ::std::vector<T>>();  
}  

Ответы (2 шт):

Автор решения: Zhihar

если N - константа, известная во время компиляции, то такую вещь провернуть еще можно было бы,

но во время выполнения, когда программа уже скомпилирована, многомерный вектор придется создавать руками, т.е. рекурсивным вызовом

да и по хорошему вместо многомерного вектора всегда можно создать одномерный вектор, только индекс придется вычислять самому (например вместо двумерного вектора зачастую удобнее иметь одномерный размером MxN, где index = i + j * M)

→ Ссылка
Автор решения: Alex Guteniev

Для ограниченного набора случаев подобную задачу можно решить перебором всех случаев в рантайме, примерно так:

switch(dim)
{
case 1: process<1>(...);
case 2: process<2>(...);
...

Копипасту можно убрать шаблонным и/или препроцессорным метапрограмммированием.

В общем случае, нельзя воплотить неограниченное (или слишком большое) число вариантов шаблона

→ Ссылка