使用多维数组的C++模板

iBu*_*Bug 3 c++ templates using c++11

是否有可能在C++中写这个:

template <typename T, size_t dim, size_t len>
using A = /* something */;
Run Code Online (Sandbox Code Playgroud)

这将使这两行等效:

/* 1 */ A<int, 3, 5> a;   A<char, 5, 3> c;

/* 2 */ int a[5][5][5];   char c[3][3][3][3][3];
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

可能吗?是的,你可以在编译时进行任意复杂的计算,所以肯定有一个解决方案.

最直接的方法是使用模板递归,如下所示:

template <class T, size_t dim, size_t len>
struct A_helper {
    using type = typename A_helper<T, dim - 1, len>::type[len];
};

template <class T, size_t len>
struct A_helper<T, 0, len> {
    using type = T;
};

template <class T, size_t dim, size_t len>
using A = typename A_helper<T, dim, len>::type;
Run Code Online (Sandbox Code Playgroud)

在Coliru上看到它:http://coliru.stacked-crooked.com/a/bfc9052b30bce553

  • @iBug你需要一些可以部分专门化的东西来提供基本案例,而别名模板不能(部分或全部)专门化. (2认同)