一、重载与模板
函数模板可以被另一个模板或一个普通非模板函数重载
如果涉及函数模板,则函数匹配规则会有以下的约束:
如果同样好的函数中只有一个是非模板函数,则选择此函数
如果同样好的函数中没有非模板函数,而有多个函数模板,则其中一个模板比其他模板更特例化,则选择此模板
否则,调用有歧义
①对于一个调用,其候选函数包括所有模板实参推断成功的函数模板实例
②候选的函数模板总是可行的,因为模板实参推断会排除任何不可行的模板
③可行函数(模板与非模板)按类型转换(如果对此调用需要的话)来排序。当然,可以用于函数模板调用的类型是非常有限的
④如果恰有一个函数比任何其他函数都更好的匹配,则选择此函数。但是,如果有多个函数提供同样好的匹配,则:
编写重载模板
我们构造一组函数,它们在调试中可能很有用,用来打印相关的信息,两个重载函数定义如下:
//第一版本 //打印任何类型 template<typename T> string debug_rep(const T &t) { ostringstream ret; ret << t; return ret.str(); } //第二版本 //参数为指针类型的 //注意: