C++Primer-重载与模板
函数模板可以被另一个模板或普通函数重载,函数匹配规则有所改变:
(1)候选函数包括所有模板实参推断成功的函数模板实例
(2)按照类型转换排序,模板能调用的转换是很有限的
(3)若优先级相同,只有一个普通函数选择普通函数,都是模板选择更特例化的模板
编写重载模板
template<typename T> string debug_rep(const T &t) { ostringstream ret; ret << t; return ret.str(); } template<typename T> string debug_rep(const T *p) { ostringstream ret; ret << p; if(p) ret << "" << debug_rep(*p); else ret << "null pointer"; return ret.str(); } const string *sp = &s; cout << debug_rep(sp) << endl; //两个都可以,第一个T会被绑定为string*,第二个被绑定为const string,由于第一个模板更通用,所以将会匹配第二个