我正在学习一种用于查找数组中元素数量的技术(这样我就可以开始编写排序算法,而无需将数组的长度作为参数传递给数组),但是在本教程中,这个行显示为模板声明:
template <typename T, size_t N>
老实说,我不知道您可以在一个模板声明中声明多个类型名,但是“size_t N”还有什么作用?这也是模板声明中的变量声明吗?
size_t
是一种类似于 的类型unsigned int
。将它放在模板参数中仅意味着您传递的是size_t
,而不是类型。N
大概表示数组的大小,是一个无符号值。例如:
template<typename T, size_t N>
void zeroArray(T (&arr)[N]) { //arr is a reference to an array
std::fill(arr, arr + N, 0); //of N elements of type T
}
int main() {
int arr[3];
zeroArray<int, 3>(arr);
}
在示例中,我可以说:
zeroArray(arr);
因为两个模板参数都是推导出来的。
“size_t N”是做什么的?这也是模板声明中的变量声明吗?
是的,基本上。
模板参数可以是整数类型的类型或值。它们也可以是其他一些东西(请参阅[C++11: 14.3.2/1]
),我不会称它们为“变量”本身,但是......
无论如何,这些值也可以像类型一样推导出来,所以:
template <typename T, size_t N>
size_t array_size(const T (&)[N])
{
return N;
}
int main()
{
int x[5];
char y[10];
std::string z[20];
std::cout << array_size(x) << ',' << array_size(y) << ',' << array_size(z) << '\n';
}
输出:5,10,20
。
完全有效。