История изменений
Исправление thunar, (текущая версия) :
Сейчас сформулирую полную задачу.
Есть, например, в классе такой метод:
template<int n, int d>
struct foo_t{
//n -- число измерений
//d -- размер аргумента form_t
//data[nx][ny][nz]
/* ... */
void inline operator ()(const form_t<d> cfs[]){
/* ... */
if constexpr(n==3){
for(auto&&[i,x] : cfs[0]){ //d-раз
for(auto&&[j,y] : cfs[1]){ //d-раз
for(auto&&[k,z] : cfs[2]){ //d-раз
auto cff = x*y*z;
auto var = data[i][j][k];
//do stuff with var
}}}
return;
}
/* ... */
}
};
Соответственно, этих «do stuff with var» может быть много, и мне нужно вместо множества реализаций под каждый n и разные задачи вынести весь обход из метода в итератор, так что бы семантически это было что-то вроде
constexpr int n = 3, d=4;
foo_t<n,d> foo;
form_t<d> forms[n];
for(auto&&[cff,var] : pass(foo, cfs){
//do stuff
}
Исправление thunar, :
Сейчас сформулирую полную задачу.
Есть, например, в классе такой метод:
template<int n, int d>
struct foo_t{
//n -- число измерений
//d -- размер аргумента form_t
//data[nx][ny][nz]
/* ... */
void inline operator ()(const form_t<d> cfs[]){
/* ... */
if constexpr(n==3){
for(auto&&[i,x] : cfs[0]){ //d-раз
for(auto&&[j,y] : cfs[1]){ //d-раз
for(auto&&[k,z] : cfs[2]){ //d-раз
auto cff = x*y*z;
auto var = data[i][j][k];
//do stuff with var
}}}
return;
}
/* ... */
}
};
Соответственно, этих «do stuff with var» может быть много, и мне нужно вместо множества реализаций под каждый n и разные задачи вынести весь обход в итератор, так что бы семантически это было что-то вроде
constexpr int n = 3, d=4;
foo_t<n,d> foo;
form_t<d> forms[n];
for(auto&&[cff,var] : pass(foo, cfs){
//do stuff
}
Исправление thunar, :
Сейчас сформулирую полную задачу.
Есть, например, в классе такой метод:
template<int n, int d>
struct foo_t{
//n -- число измерений
//d -- размер аргумента form_t
//data[nx][ny][nz]
/* ... */
void inline operator ()(const form_t<d> cfs[]){
/* ... */
if constexpr(n==3){
for(auto&&[i,x] : cfs[0]){ //d-раз
for(auto&&[j,y] : cfs[1]){ //d-раз
for(auto&&[k,z] : cfs[2]){ //d-раз
auto cff = x*y*z;
auto var = data[i][j][k];
//do stuff with var
}}}
return;
}
/* ... */
}
};
Соответственно, этих «do stuff with var» может быть много, и мне нужно вместо множества реализаций под каждый n и разные задачи вынести весь обход в итератор, так что бы семантически это было что-то вроде
constexpr int n = 3, d=4;
foo_t<n,d> foo;
form_t<d> forms[n];
for(auto&&[cff,var] : pass(foo, cfs){
//do stuff
}
Исходная версия thunar, :
Сейчас сформулирую полную задачу.
Есть, например, в классе такой метод:
template<int n, int d>
struct foo_t{
//n -- число измерений
//d -- размер аргумента form_t
//data[nx][ny][nz]
/* ... */
void inline operator ()(const form_t<d> cfs[]){
/* ... */
if constexpr(n==3){
for(auto&&[i,x] : cfs[0]){ //d-раз
for(auto&&[j,y] : cfs[1]){ //d-раз
for(auto&&[k,z] : cfs[2]){ //d-раз
auto cff = x*y*z;
auto var = data[i][j][k];
//do stuff with var
}}}
return;
}
/* ... */
}
};
Соответственно, этих «do stuff with var» может быть много, и мне нужно вместо множества реализаций под каждый n вынести обход в итератор, так что бы семантически это было что-то вроде
constexpr int n = 3, d=4;
foo_t<n,d> foo;
form_t<d> forms[n];
for(auto&&[cff,var] : pass(foo, cfs){
//do stuff
}