12.2.5 重载

    函数模板支持重载,既可以在模板之间重载(同名模板),又可以实现模板和普通函数间的重载,但模板的重载相比普通函数的重载要复杂一些,如下所示。


    template<class T1,class T2> T1 Greater(T1 a,T2,b){……}与 template<class T3,class T4> T3 Greater(T3 c,T4,d){……}

    看似不同的两个模板,仔细分析后发现其本质是一样的,如果调用“Greater(2,3.5);”,都实例化为“Greater(int,double);”,会出现重复定义的错误。

    仅仅依靠返回值不同的模板重载也是不合法的,如下所示。


    template<class T1,class T2> T1 Greater(T1 a,T2,b){……}与 template<class T3,class T4> T3*Greater(T3 c,T4,d){……}

    总体来说,模板的重载应做到不引起“二义性”,是否会出现二义性不仅仅取决于定义的形式和传递的参数类型,还取决于编译器对函数执行顺序的选择,这在稍后会进行介绍。