C++中模板函数的重载

davidofmine (david)
这是一个重载模板函数的问题,所以我们还是先从模板函数的特点入手来分析这个问题。

模板函数的特点告诉我们,虽然模板参数 T 可以实例化成各种类型,但是采用模板参数 T 的各参数之间必须保持完全一致的类型。模板类型并不具有隐式的类型转换,例如int 与char 之间,float 与 int 之间,float 与 double 之间等。所以我们看下面的例子就知道有些语句是不能通过编译的。

template < class T>
T max (T x, T y) {
return ( x > y) ? x: y;
}

void func(int i, char c, float f) {
{
max(i,i); // 正确
max(c,c); // 正确
max(i,c); // 错误
max(c,i); // 错误
max(f,f); // 正确
max(i,f); // 错误
max(f,i); // 错误
}

从上面的例子可以看出,当参数类型完全一致时语句才是正确的。

由于类型转换在C++中是非常普遍的,解决这个问题的方法是允许函数模板参与重载。这便是我在上一个问题中所列举的两种重载方法。

对于两位高手的见解我非常感谢。不过我个人认为tony的回答好像比较正确。我是在linux上用GNU的C++编译器,我再去试试,或许是
int max(int, int) 和 char max(char, char)只需要申明一个就可以了。
(#112705@0)
2001-6-26 -05:00

回到话题: C++中模板函数的重载

回到论坛: HOME枫下论坛枫下论坛主坛工作学习IT技术讨论

URL:   
http://www.rolia.net/zh/post.php?f=0&p=112705