【发布时间】:2011-10-08 05:09:36
【问题描述】:
wikipedia (here) 给出了 for 循环的编译时间展开...... 我想知道我们是否可以在里面使用带有模板语句的类似 for 循环... 比如……
以下循环是否有效
template<int max_subdomain>
void Device<max_sudomain>::createSubDomains()
{
for(int i=0; i< max_subdomain; ++i)
{
SubDomain<i> tmp(member);
...
// some operations on tmp
...
}
}
SubDomain 是一个接收模板参数 int 的类,这里使用的是 Device 类成员的参数构造。
谢谢大家的回答... 现在你知道我想要什么了... 有没有我想达到的目标??
我终于得到了我想要的............ 而不是直接使用for循环... 可以改用Boost::MPL for_each construct。我还没有实现它,但我猜这提供了一种方法来做我想做的事.....
我从另一个堆栈溢出问题here 中得到了答案...但是同一问题的comment 拒绝使用它,因为它会非常慢(当然对于大型 for 循环)...但是..对于不大的循环,我认为不应该有任何腹胀......我会尝试代码并让你知道结果......
example 中很好地说明了用法
【问题讨论】:
-
你试过了吗?你说的有效是什么意思?问题是什么?
-
其实……现在我的代码里的东西很乱……
-
@Jayesh,请参考编辑后的答案。我在演示代码中犯了一个错误。
-
“谴责它的使用”注释是特定于 2D 循环的,它实际上不需要编译时展开。如果
<i>的所有值都需要SubDomain<i>,那么编译器自然必须实例化所有这些值。这是不可避免的工作。 -
@MSalters:感谢您的澄清......
标签: c++ templates loop-unrolling