相关疑难解决方法(0)

在C++中模板化'for'循环?

我在下面有一个带有运行时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(或其他东西)帮我创建吗?

c++ optimization templates metaprogramming

23
推荐指数
4
解决办法
1万
查看次数

标签 统计

c++ ×1

metaprogramming ×1

optimization ×1

templates ×1