估计函数参数数组的尺寸

时间:2017-07-18 11:11:59

标签: c++ templates constexpr

理论上,类型应该在编译时知道,编译器也知道维度。目前,我有一个模板函数,它将矩阵的维度作为模板参数。我可以通过估算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
  }
};

1 个答案:

答案 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

}