簡體   English   中英

功能模板中的非類型參數

[英]Non-type parameter in function template

我有一個非常簡單的模板函數,但是由於非類型參數,在如何實例化/調用該函數方面存在困惑。 模板函數的定義如下:

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樣式數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM