我正在调查this library,以下一段代码引起了我的注意
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
会有什么价值?
答案 0 :(得分:3)
允许C ++编译器在某些情况下从用于调用该函数的参数中推导出模板函数的模板参数。
所以例如这个
PrivateChatVC
将template<class overflow_policy> void parse(char*col, float&x) { parse_float(col, x); }
推断为T
,因为float
的类型为x
。 (还有一些关于它是否是参考的规则,但是没有必要对它是如何工作的一般概念有所了解。)