У меня есть фрагмент кода C ++ ниже с циклом выполнения 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 (или что-то еще) помочь мне создать это?