模板参数省略

Template parameter omitted?

本文关键字:参数省      更新时间:2023-10-16

我正在研究这个库,下面的一段代码引起了我的注意

template<class T>
void parse_float(const char*col, T&x){
    ...
}
template<class overflow_policy> void parse(char*col, float&x) { parse_float(col, x); }
template<class overflow_policy> void parse(char*col, double&x) { parse_float(col, x); }
template<class overflow_policy> void parse(char*col, long double&x) { parse_float(col, x); }

我看到函数parse_float被模板化为参数class T。然而,在该函数的实现下面,有一些其他的模板函数调用parse_float,但它们不传递模板参数给它。这怎么可能呢?class T的值是多少?

c++编译器在某些情况下可以从调用模板函数时使用的形参中推断出模板函数的形参。

例如这个

template<class overflow_policy> void parse(char*col, float&x) { parse_float(col, x); }

T推断为float,因为x的类型是float。(关于它是否是引用也有一些规则,但这对于了解它的工作原理是没有必要的)。