具有多个类型名称的C ++模板

时间:2012-11-06 20:34:19

标签: c++ arrays function templates

我正在学习一种用于查找数组中元素数量的技术(这样我就可以开始编写排序算法,而不需要将数组的长度作为参数传递,但是在教程中,此行显示为模板声明:

template <typename T, size_t N>

老实说,我不知道你可以在一个模板声明中声明多个类型名称,但是“size_t N”的作用是什么?这是一个模板声明中的变量声明吗?

2 个答案:

答案 0 :(得分:6)

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);

因为推断出两个模板参数。

答案 1 :(得分:1)

  

“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

完全有效。