功能模板中的非类型参数

时间:2018-07-02 20:57:10

标签: c++ arrays templates non-type

我有一个非常简单的模板函数,但是由于非类型参数,在如何实例化/调用函数方面存在一些困惑。 模板函数的定义如下:

template<typename Glorp, int size>
Glorp min(Glorp array[size])
{

Glorp minival = array[0];
for (int i = 0; i < size; i++)
if (array[i] < minival)
    minival = array[i];

return minival;
}

现在,在main()中,我有以下代码:

void main()
{
const int size=5;
int array[size];
for (int i = 0; i < size; i++)
    cin >> array[i];

int p = min(array[size]);
cout << p;
}

这会向我显示错误消息:

Error   1   error C2783: 'Glorp min(Glorp *)' : could not deduce template argument for 'size'   c:\users\tamara\documents\visual studio 2013\projects\nuevoprojecto\nuevoprojecto\main.cpp  23  1   NuevoProjecto

如何从main()调用此函数?我找不到答案,我看到的唯一例子是模板类中的非类型参数

1 个答案:

答案 0 :(得分:3)

我在您的代码中看到两个主要问题

1)下面是推导数组的模板函数的语法,推导类型和大小,

template <typename Glorp, int size>
Glorp min (Glorp (&array)[size])
 {
   // ...........^^^^^^^^
 }

2)您必须在没有[size]

的情况下调用它
int p = min(array[size]); // wrong
int p = min(array);       // correct

因为传递了array[size],所以您试图从未分配的内存位置传递单个int(正确的array值是从array[0]到{{1} }。

一个小问题:array[size-1]返回main(),而不是int

主题建议:如果您至少可以使用C ++ 11,请考虑尽可能使用void而不是旧的C样式数组。