我有一个非常简单的模板函数,但是由于非类型参数,我对如何实例化/调用该函数感到困惑。 模板函数的定义如下:
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) 模板函数接收数组、推导类型和大小的语法如下
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]
到 array[size-1]
).
一个小问题:main()
返回一个 int
,而不是一个 void
。
题外话建议:如果您至少可以使用 C++11,请尽可能考虑使用 std::array
,而不是旧的 C 风格数组。
关于c++ - 函数模板中的非类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51143638/