2011-08-07 99 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'用任意類型實例化它。 –