请考虑以下代码:
template<typename Body>
Body solve(Body a, Body b){
Body zero(0);
return zero;
}
template<typename Body, Body& zero>
Body solve(Body a, Body b){
return zero;
}
complex<double> zero_complex(0);
int main() {
complex<double> c1(1,2);
complex<double> c2(3,4);
solve<complex<double>, zero_complex> (c1,c2);
return 0;
}
如何通过引用获得complex<double>
?
当我重载一个函数(见下文)时,我得到一个模糊错误。
template<typename Body>
Body solve(Body& a, Body& b){
Body zero(0);
return zero;
}
答案 0 :(得分:0)
这是因为argument dependent lookup(ADL) or Koenig lookup
如果2个函数具有相同的参数,则尽管具有不同的模板参数,但不能彼此区分。
答案 1 :(得分:-1)
它是因为你有两个具有相同签名的函数solve
。将第二个更改为solve(Body a, Body b, Body& c = zero)