#include <iostream>
// 主模板,用于计算数组元素个数
template<typename T, size_t N>
struct ArraySize {
static const size_t value = sizeof(T[N]) / sizeof(T);
};
// 递归模板特化,用于处理嵌套数组
template<typename T, size_t N1, size_t N2>
struct ArraySize<T[N1][N2]> {
static const size_t value = ArraySize<T[N2]>::value * N1;
};
int main() {
int arr1[5];
std::cout << "arr1的元素个数: " << ArraySize<decltype(arr1), 5>::value << std::endl;
int arr2[3][4];
std::cout << "arr2的元素个数: " << ArraySize<decltype(arr2), 3>::value << std::endl;
return 0;
}
- 主模板
ArraySize
:
- 它接受数组的元素类型
T
和数组维度 N
。
- 通过
sizeof(T[N]) / sizeof(T)
计算数组元素个数。
- 递归模板特化
ArraySize<T[N1][N2]>
:
- 处理二维数组,通过递归调用
ArraySize<T[N2]>
并乘以第一维的大小 N1
来计算总元素个数。
main
函数:
- 定义了一个一维数组
arr1
和一个二维数组 arr2
。
- 使用
ArraySize
模板计算并输出它们的元素个数。