在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.
我相信我可能采取了错误的方法
答案 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);
}