2011-08-07 44 views
3

我想迭代不同类型的数组的元组,调用每个元素的函数。我目前的实现是这样的:迭代数组的元组

// Some T... is defined up here. 

// ArrayTuple!(T) is a TypeTuple of arrays of each type in T. 
ArrayTuple!(T) data; 
void iterate(alias func, uint n = 0)() 
{ 
    static if(n < T.length) 
    { 
     foreach(elem; data[n]) 
      func(elem); 

     iterate!(func, n + 1)(); 
    } 
} 

,并用作这样的:

void foo(T)(T elem) 
{ 
    ... 
} 

iterate!(foo)(); 

的伟大工程的大部分,但委托模板不能过去了func。任何有关使用堆栈指针支持模板函数的实现的建议?

+0

不是D程序员,不确定,也许[this](http://d-programming-language.org/phobos/std_range.html#zip)将帮助 –

回答

1

代表参数的类型是什么?你不能获取方法模板的地址并获得一个委托 - 你需要用一个类型实例化它。

+0

整个问题的关键在于它键入了许多不同的这取决于T中的类型。这就是为什么它被作为模板别名参数而不是函数指针或委托传递的原因。 – bfops

+0

您是否在问如何使用模板化方法进行这项工作? –

+0

用“带栈指针的函数”判断,我猜“不”。我不太确定你想实现什么 - 嵌套函数不能被模板化,你需要通过别名来传递模板以允许'iterate'用任意类型实例化它。 –