在打字稿中,如何编写处理任意维数组的函数(例如:Array ,Array >,...)?
问题描述:
在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.
,我相信我可以是错误的做法
答
在C++中,你是完全专业的函数模板。
无论如何,打字稿中的泛型更像是Java或C#中的泛型,与C++中的模板不太相似。
你不能定义完整的专业化。
答
您只能有一个具有相同名称的函数,因此您需要将两个部分协调到同一个函数中。在这种情况下,对阵列进行简单的检查就足够了。
f(v: any)
{
if (Array.isArray(v))
for (let e in v)
this.f(e);
else
doSomething(v);
}