模板提供类型检查

时间:2015-03-30 23:19:25

标签: c++ templates types

所以我理解模板可以提供一种进行泛型编程的方法,例如:

template <typename T>

T add(T x, T y){ return x + y}

现在我想知道是否提供了任何类型检查模板?或者我应该将x和y定义为整数以避免错误。

2 个答案:

答案 0 :(得分:0)

如果为类型T定义operator +,则没有问题。

答案 1 :(得分:0)

当然,会进行类型检查,因此您无法执行以下操作:

string c = add(3UL, 2.0E4);  /* ERROR: the type of the result and the types of the arguments must match */

此外,正如已经指定的那样,T必须是在其上定义了添加运算符+的类型。只要遵守这些规则,您就可以随意使用通用功能做任何事情。

#include <iostream>

using namespace std;

template <typename T>
T add(T a, T b)
{
    return a + b;
}

int main()
{
    string c = add(3UL, 'A');
}

将导致:

$ make pru
g++     pru.cc   -o pru
pru.cc: In function ‘int main()’:
pru.cc:13:28: error: no matching function for call to ‘add(long unsigned int, char)’
pru.cc:13:28: note: candidate is:
pru.cc:6:3: note: template<class T> T add(T, T)
make: *** [pru] Error 1