saj*_*jas 2 c++ templates arguments template-argument-deduction
template<class T> T sqrt (T);
template<class T> complex<T> sqrt(complex<T>);
double sqrt(double);
void f(complex<double> z)
{
sqrt(z);
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,如何sqrt<double>(complex<double>)最终成为模板参数推导的候选者?作者说任何匹配的电话sqrt<T>(complex<T>)也匹配sqrt<T>(<T>).怎么样?
代码来自Bjarne Stroustrup撰写的The C++ Programming Language.第13.3.2节
嗯,z是类型complex<double>.随着T被double清楚一致
template <typename T> complex<T> sqrt(complex<T>);
Run Code Online (Sandbox Code Playgroud)
此外,与T被complex<double>它匹配
template <typename T> T sqrt(T);
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
作为匹配这两个函数的结果,用于决定使用哪个函数的重载集包括两个实例
complex<double> sqrt<double>(complex<double>)
complex<double> sqrt<complex<double>>(complex<double>)
Run Code Online (Sandbox Code Playgroud)
两者都匹配,但第一个更专业,因此,由重载决议选择.