Как (если возможно) я могу использовать переменное программирование С++ 11 для определения серии vector
в теле функции (или, другими словами, последовательность N
-мерных массивов с уменьшением N
до 0), как и переменные ниже?
vector<vector<vector<int>>> v<3>;
vector<vector<int>> v<2>;
vector<int> v<1>;
int v<0>;
То, что я себе представляю, это что-то вроде:
#include <iostream>
#include <vector>
using namespace std;
template<int ...> struct seq {};
template<int N, int ...S> struct gens : gens<N-1, N-1, S...> {};
template<int ...S> struct gens<0, S...>{ typedef seq<S...> type; };
template<int ...S>
void f(seq<S...>) {
//how do I write definitions of v<N> here?
vector<vector<...(N layers)<vector<int> ...> v<N>; //??how-to, not valid c++
vector<vector<...(N -1 layers)<vector<int> ...> v<N-1>;//??how-to, not valid c++
//...
vector<int> v<1>; //??how-to, not valid c++
int v<0>; //??how-to, not valid c++
//...
}
int main() {
f(typename gens<3>);
return 0;
}
Также было бы проще в С++ 14?
Спасибо,
- EDIT -
Просто, чтобы уточнить, что я имею в виду под "башней векторов", лучше всего описывается N-кортежем (v_1, v_2,..., v_N), где N является интегральным параметром шаблона. v_1 имеет вектор, v_2 имеет вектоp > и т.д.
- EDIT2 -
До сих пор ответы квантведа и R успешно решали проблему определения N-кортежа для любого фиксированного N, например 3, но не могут генерировать кортеж для неуказанного N
. В дополнение к функциональности в ответах мне нужна функция, которая может использоваться как gen_tower<N>
, которая возвращает tuple(v1,v2,...,vN)
.
Рассмотрим пример использования вариационного программирования для вычисления факториалов. Мне нужна функция для вычисления факториала factorial<N>()
для любого N
, в дополнение к способности записывать любое конкретное выражение <1*2*3>
вручную. (Вот почему я спросил о вариационном программировании и облегчил ли c++14
.)
P.S.
Чисто из личных интересов, я хочу, чтобы эта последовательность надеялась реализовать общую функцию, которая может читать N-мерный массив из файла. Я точно не знаю, как это сделать, но я думаю, что на первом этапе я должен был бы определить окончательный N
-мерный массив, а промежуточные k
-мерные массивы для k
от N-1
до 1
. Я могу читать 2-мерные массивы и 3-мерные. Но было бы неплохо читать массивы любых измерений.