2016-11-18 10 views
1

在C++中,我可以寫一個模板函數:在打字稿中,如何編寫處理任意維數組的函數(例如:Array <number>,Array <Array <number>>,...)?

#include <stdio.h> 
#include <vector> 
template <typename V> 
void f(V& v){ 
    for(auto& e : v){ 
     f(e); 
    } 
    printf("\n"); 
} 

template <> 
void f(int& v){ 
    printf("%d ",v); 
} 

處理在矢量載體的任何尺寸(例如:矢量< int>的,矢量<矢量< INT >>,矢量<矢量<矢量< INT >>>,...):

int main(){ 
    std::vector<int> v1={1,2}; 
    f(v1); 
    std::vector<std::vector<int> > v2={{3,4},{5,6,7}}; 
    f(v2); 
    return 0; 
}; 

是這樣的這種類型的功能:

let v1 : Array<number>=[1,2]; 
f<Array<number>>(v1); 

let v2 : Array<Array<number>>=[[3,4],[5,6,7]]; 
f<Array<Array<number>>>(v2); 

也可能在打字稿中?我嘗試類似:

f<V>(v : V){ 
    for(let e in v){ 
    this.f(e); 
    } 
} 

f<>(v : number){ 
} 

但錯誤說

Duplicate function implementation. 

,我相信我可以是錯誤的做法

回答

0

在C++中,你是完全專業的函數模板。
無論如何,打字稿中的泛型更像是Java或C#中的泛型,與C++中的模板不太相似。
你不能定義完整的專業化。

0

您只能有一個具有相同名稱的函數,因此您需要將兩個部分協調到同一個函數中。在這種情況下,對陣列進行簡單的檢查就足夠了。

f(v: any) 
{ 
    if (Array.isArray(v)) 
    for (let e in v) 
     this.f(e); 
    else 
    doSomething(v); 
} 
相關問題