Как (ако е възможно) мога да използвам c++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;
}
Също така, това ще бъде ли по-лесно в c++14?
Благодаря,
--РЕДАКТИРАНЕ--
Само за пояснение, това, което имам предвид под „кула от вектори“, се описва най-добре от N-кортеж (v_1, v_2, ..., v_N), където N е интегрален параметър на шаблона. v_1 е от вектор, v_2 е от вектор> и т.н.
--РЕДАКТИРАНЕ2--
Досега отговорите на quantdev и 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-измерни. Но би било хубаво да можете да четете масиви с всякакви измерения.