要捕获数组模板参数的大小,可以使用模板偏特化和递归来实现。下面是一个示例代码:
#include
template
struct ArraySize;
template
struct ArraySize {
static constexpr std::size_t value = N;
};
template
void printArraySize(const T(&)[N]) {
std::cout << "Array size: " << ArraySize::value << std::endl;
}
int main() {
int arr1[5];
double arr2[10];
printArraySize(arr1); // 输出:Array size: 5
printArraySize(arr2); // 输出:Array size: 10
return 0;
}
在上面的示例中,我们定义了一个模板结构体ArraySize,用于捕获数组模板参数的大小。ArraySize的偏特化版本接受一个数组参数T[N],其中T是数组类型,N是数组的大小。在偏特化版本中,我们定义了一个value静态成员变量来保存数组的大小。
然后,我们定义了一个printArraySize函数,它接受一个数组参数,并使用ArraySize来获取数组的大小,并打印出来。
在main函数中,我们声明了一个int类型的数组arr1和一个double类型的数组arr2,并调用printArraySize函数来打印数组的大小。
运行上述代码,将输出数组的大小。对于arr1,输出为Array size: 5,对于arr2,输出为Array size: 10。