识别C ++模板约束

时间:2013-07-24 13:00:12

标签: c++ templates constraints

所以我需要一些帮助/技巧来识别C ++中的模板约束。以下是一些包含6个总约束的示例代码。我可以找到明显的但不能识别所有6 ...

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

关于每个约束或约束组的简短解释会很好。谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

  1. T必须是对象类型而不是引用,因为const T a[]必须是有效的参数声明。
  2. T必须是可移动的或可复制的,因为它是返回类型。
  3. 由于T
  4. T sum = a[0]必须是可复制构建的。
  5. 由于T
  6. t += s必须允许T类型为sum += a[i]的对象。
  7. 由于T
  8. sum/size必须可以被整数整除。
  9. 分割的结果必须是T,或者必须至少可以隐式转换为T,因为该函数返回T

答案 1 :(得分:0)

1-2。必须是T型的数组。
3. size必须是int。
4.尺寸必须小于或等于a的长度 5.可变接收返回必须是类型T.
6.数组的长度必须为1或更长。