我在下面有一个带有运行时for循环的C++代码段,
for(int i = 0; i < I; i++)
for (int j = 0; j < J; j++)
A( row(i,j), column(i,j) ) = f(i,j);
Run Code Online (Sandbox Code Playgroud)
该片段被重复调用.循环边界'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;
Run Code Online (Sandbox Code Playgroud)
但是我想这样做而不会破坏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
Run Code Online (Sandbox Code Playgroud)
可以提升:: lambda(或其他东西)帮我创建吗?