У меня есть фрагмент С++ ниже с циклом времени выполнения for
,
for(int i = 0; i < I; i++)
for (int j = 0; j < J; j++)
A( row(i,j), column(i,j) ) = f(i,j);
Отсчетчик вызывается повторно. Границы цикла "I" и "J" известны во время компиляции (I/J - порядок от 2 до 10). Я хотел бы развернуть петли, используя шаблоны. Основным узким местом является функция row() и column() и f(). Я хотел бы заменить их эквивалентными метапрограммами, которые оцениваются во время компиляции, используя трюки row<i,j>::enum
.
То, что я действительно люблю, - это то, что в конечном итоге разрешает цикл в последовательности операторов, таких как:
A(12,37) = 0.5;
A(15,23) = 0.25;
A(14,45) = 0.25;
Но я бы хотел сделать это, не слишком сильно разрушая структуру for
- for
. Что-то в духе:
TEMPLATE_FOR<i,0,I>
TEMPLATE_FOR<j,0,J>
A( row<i,j>::value, column<i,j>::value ) = f<i,j>::value
Может ли boost:: lambda (или что-то еще) помочь мне создать это?