2011-08-07 20 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'が任意の型でインスタンス化できるようにする必要があります。 –

関連する問題