代码之家  ›  专栏  ›  技术社区  ›  Jabberwocky

声明2(甚至多)维STD::数组优雅

  •  1
  • Jabberwocky  · 技术社区  · 5 年前

    我使用的是基于 std::array .

    基本上不是:

    MyType myarray[X_SIZE][Y_SIZE];
    

    我有:

    std::array<std::array<MyType, Y_SIZE>, X_SIZE> myarray;
    

    这项工作非常好,但在我看来,声明是不太可读的。

    有没有办法用一些聪明的C++模板来声明这个,所以声明看起来像这样?

    My2DArray<Mytype, X_SIZE, Y_SIZE> myarray;
    
    1 回复  |  直到 5 年前
        1
  •  11
  •   Angew is no longer proud of SO    5 年前

    如果您只需要二维数组,这非常简单:

    template <class T, std::size_t X, std::size_t Y>
    using My2DArray = std::array<std::array<T, Y>, X>;
    

    template <class T, std::size_t N, std::size_t... Ns>
    struct AddArray {
        using type = std::array<typename AddArray<T, Ns...>::type, N>;
    };
    
    template <class T, std::size_t N>
    struct AddArray<T, N> {
        using type = std::array<T, N>;
    };
    
    template <class T, std::size_t... N>
    using MyNDArray = typename AddArray<T, N...>::type;
    

    [Live example]