C++11 std::rank是如何实现的?
我看了这篇档案文章 但我仍然不清楚C++11 std::rank是如何实现的?,c++11,std,rank,C++11,Std,Rank,我看了这篇档案文章 但我仍然不清楚std::rank实现的逻辑是如何工作的 当我提到以下内容时 我在可能的实施下看到了以下内容 template<class T> struct rank : public std::integral_constant<std::size_t, 0> {}; template<class T> struct rank<T[]> : public std::integral_constant<std::si
std::rank
实现的逻辑是如何工作的
当我提到以下内容时
我在可能的实施下看到了以下内容
template<class T>
struct rank : public std::integral_constant<std::size_t, 0> {};
template<class T>
struct rank<T[]> : public std::integral_constant<std::size_t, rank<T>::value + 1> {};
template<class T, std::size_t N>
struct rank<T[N]> : public std::integral_constant<std::size_t, rank<T>::value + 1> {};
模板
结构秩:public std::integral_常量{};
样板
结构秩:public std::integral_常量{};
样板
结构秩:public std::integral_常量{};
有人能简单解释一下上述实现逻辑是如何工作的吗?(它使用可变模板吗?我将尝试用一种简单的方式解释 使用
std::rank
可以知道数组类型的维数,其中not数组被视为零维数组
给定类型T
,有三种情况:
T
不是数组T
是另一种类型U
元素的“未知边界数组”(参见中),即大小未知的数组,我们可以将其表示为U[]
,其中U
是另一种类型T
是U
类型元素的已知大小N
上的数组,我们可以将其表示为U[N]
,其中U
是另一种类型U
可以是数组,也可以不是数组,因此游戏将重新启动
看看我在案例2和案例3中使用U
而不是T
重写的“可能实现”
// case 1: T isn't an array
template<class T>
struct rank
: public std::integral_constant<std::size_t, 0>
{ };
// case 2: T is an array of unknown bound (U[])
template<class U>
struct rank<U[]>
: public std::integral_constant<std::size_t, rank<U>::value + 1>
{ };
// case 3: T is an array on size N (U[N])
template<class U, std::size_t N>
struct rank<U[N]>
: public std::integral_constant<std::size_t, rank<U>::value + 1>
{ };
我还想了解按照递增值连续剥离数组维度的实现逻辑。这可以用一个简单的例子来解释吗?@user9196120-我想最后的“实际例子”应该可以解释它。
std::rank<int[1][2][3]>::value
== 1 + std::rank<int[1][2]>::value
== 1 + 1 + std::rank<int[1]>::value
== 1 + 1 + 1 + std::rank<int>::value
== 1 + 1 + 1 + 0
== 3