【问题标题】:In typescript, how to write a function to handle arbitrary dimensional array (e.g.:Array<number>,Array<Array<number>>,...)?在打字稿中,如何编写一个函数来处理任意维数组(例如:Array<number>,Array<Array<number>>,...)?
【发布时间】:2017-04-01 22:20:02
【问题描述】:

在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(e.g.:vector,vector>,vector>>,...):

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++ arrays vector typescript typescript2.0


    【解决方案1】:

    在 C++ 中,您完全专注于函数模板。
    无论如何,typescript 中的泛型更像 Java 或 C# 中的泛型,与 C++ 中的模板不太相似。
    你不能定义完整的专业化。

    【讨论】:

      【解决方案2】:

      您只能拥有一个同名的函数,因此您需要将这两个部分协调到同一个函数中。在这种情况下,一个简单的数组检查就足够了。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-19
        • 2021-05-31
        • 2020-03-13
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 2019-12-05
        相关资源
        最近更新 更多