首先,类模板必须被显式特化。当然了,可以通过一个辅助函数,通过参数类型,返回特化的类模板,来间接处理。
这个技术被广泛应用在ptr_fun, make_pair, mem_fun, back_inserter等辅助函数里面,来完成那些易于出错的类模板特化任务。
跟函数实参推导(根据实参所在的名字空间,推导出用哪个函数)一样,
模板实参推导,可以根据实际传入的参数类型,推导出模板里面用到的类型。
但是注意,如果参数类型不一样(需要隐式转换),那么模板参数推导不出,需要显式指定。
另外,对于返回结果的参数,需要显式指定。因为跟重载一样,编译器在推导阶段,对返回类型是不做检查的。
另外,xx_cast不是通过模板实现的,是通过操作符重载实现的。