В 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);
}
обрабатывать любые размеры вектора в векторе (например: вектор< 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);
}