利用函数模板(function template)的参数推导机制获得相应类型:
template<class I, class T>
void func_impl(I iter, T t)
{
T tmp; //获得的相应类型,可用于声明变量
//...
}
template<class I>
void func(I iter)
{
func_impl(iter, *iter);
}
int main()
{
int i;
func(&i);
}
参数类型推导技巧并非全面可用,如不能用在函数返回值上,毕竟推导的是参数,而不是返回值类型。