基于std :: array的多维数组

时间:2018-08-09 17:31:53

标签: c++ templates variadic-templates c++17 stdarray

我需要一个基于std::array的多维数组模板。

template <typename T, size_t...>
using MyArray = ? // -> here is something I don't know how to write...

用法如下:

static_assert(std::is_same_v<
  MyArray<int, 2>, std::array<int, 2>
>);

static_assert(std::is_same_v<
  MyArray<int, 2, 3>, std::array<std::array<int, 3>, 2>
>);  // the dimension should be the opposite order

MyArray a;    // a stacked 2-D array of size 2x3
a[0][2] = 2;  // valid index

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

我不知道如何仅用using来实现;我能想象得到的最好的东西需要帮助结构的帮助。

以下内容

template <typename, std::size_t ...>
struct MyArrayHelper;

template <typename T, std::size_t D0, std::size_t ... Ds>
struct MyArrayHelper<T, D0, Ds...>
 { using type = std::array<typename MyArrayHelper<T, Ds...>::type, D0>; };

template <typename T>
struct MyArrayHelper<T>
 { using type = T; };

template <typename T, std::size_t ... Ds>
using MyArray = typename MyArrayHelper<T, Ds...>::type;