2013-07-24 63 views
0

所以我需要一點幫助/提示識別模板約束在C++的。以下是一些包含6個總約束的示例代碼。我可以找到明顯的,但不能識別所有6 ...蔡作馨C++模板約束

template <class T> 
T avg(const T a[], int size) 
{ 
    T sum = a[0]; 

    for (int i = 1; i < size; i++) 
    sum += a[i]; 

    return sum/size; 
} 

關於每個約束或約束組的簡短說明會很好。謝謝您的幫助。

+3

你已經確定了什麼? – BoBTFish

+0

什麼是約束? –

+0

聽起來像作業,約束可能是對輸入參數及其值的假設。 – Joshua

回答

4
  1. T必須是對象類型而不是引用,因爲const T a[]必須是有效的參數聲明。因爲它的返回類型
  2. T必須是可移動的或可複製。
  3. T由於T sum = a[0]必須是可複製構造的。
  4. T必須允許t += s因爲sum += a[i]而導致T類型的對象。
  5. T必須可以整除,因爲sum/size
  6. 所述等分的結果必須是T或因爲該函數返回一個T必須至少隱式​​轉換爲T
+0

或他所說的... – Jiminion

+0

你是什麼意思? –

+0

你是老闆!謝謝!我還發現了這篇文章(http://msdn.microsoft.com/zh-cn/magazine/cc163788.aspx),它很好地解釋了約束。 –

0

1-2。必須是數組,類型爲T.
3.大小必須是整數。
4.大小必須小於或等於a的長度。
5.變量接收返回必須是T類型。
6.數組必須長度爲1或更長。

+1

這些不是模板約束,而是函數的先決條件。 –