理论上,类型应该在编译时知道,编译器也知道维度。目前,我有一个模板函数,它将矩阵的维度作为模板参数。我可以通过估算constexpr中的尺寸或通过模板函数来避免这种情况吗?
struct cont {};
void ffd<3>::run(cont mat[3][3][3])
理解上,我想避免声明rows
参数。
template<uint8_t rows>
struct ffd {
template<class T>
static float run(const T &mat) {
// recursion over the rows in mat
}
};
答案 0 :(得分:3)
您要搜索的是std::extent:
template< class T, unsigned N = 0> struct extent;
其中
如果T是数组类型,则提供等于的成员常量值 如果N在,则沿阵列的第N维度的元素数量 [0,std :: rank :: value)
例如,
float a[10][11][12];
调用时run(a)
:
template<class T>
float run(const T &mat)
{
std::extent<T, 0>::value; // 10
std::extent<T, 1>::value; // 11
std::extent<T, 2>::value; // 12
}