使用多维数组的 C++ 模板
C++ template using multidimensional arrays
在C++中是否可以这样写:
template <typename T, size_t dim, size_t len>
using A = /* something */;
这将使这两行等价:
/* 1 */ A<int, 3, 5> a; A<char, 5, 3> c;
/* 2 */ int a[5][5][5]; char c[3][3][3][3][3];
?
可能吗?是的,你可以在编译时做任意复杂的计算,所以肯定有解决办法。
最直接的方法就是使用模板递归,如下所示:
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;
在 Coliru 上查看:http://coliru.stacked-crooked.com/a/bfc9052b30bce553
在C++中是否可以这样写:
template <typename T, size_t dim, size_t len>
using A = /* something */;
这将使这两行等价:
/* 1 */ A<int, 3, 5> a; A<char, 5, 3> c;
/* 2 */ int a[5][5][5]; char c[3][3][3][3][3];
?
可能吗?是的,你可以在编译时做任意复杂的计算,所以肯定有解决办法。
最直接的方法就是使用模板递归,如下所示:
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;
在 Coliru 上查看:http://coliru.stacked-crooked.com/a/bfc9052b30bce553