在typescript中,如何编写一个函数来处理任意维数组(例如:Array <number>,Array <array <number>&gt;,...)?

时间:2016-11-18 06:34:07

标签: c++ arrays vector typescript typescript2.0

在C ++中,我可以编写模板函数:

#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);
}

处理vector中vector的任何维度(例如:vector&lt; int&gt;,vector&lt; vector&lt; int&gt;&gt;,vector&lt; vector&lt; vector&lt; int&gt;&gt;&gt;,...):

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.

我相信我可能采取了错误的方法

2 个答案:

答案 0 :(得分:0)

在C ++中,您完全专注于功能模板 无论如何,打字稿中的泛型更像是Java或C#中的泛型,与C ++中的模板不太相似。
您无法定义完整的专业化。

答案 1 :(得分:0)

您只能使用一个具有相同名称的功能,因此您需要将两个部分调和到同一个功能中。在这种情况下,只需检查一个数组即可。

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