所以我理解模板可以提供一种进行泛型编程的方法,例如:
template <typename T>
T add(T x, T y){ return x + y}
现在我想知道是否提供了任何类型检查模板?或者我应该将x和y定义为整数以避免错误。
答案 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