获取价值和参考。歧义。模板功能

时间:2015-10-26 20:58:51

标签: c++ templates

请考虑以下代码:

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;  
}

2 个答案:

答案 0 :(得分:0)

这是因为argument dependent lookup(ADL) or Koenig lookup

如果2个函数具有相同的参数,则尽管具有不同的模板参数,但不能彼此区分。

答案 1 :(得分:-1)

它是因为你有两个具有相同签名的函数solve。将第二个更改为solve(Body a, Body b, Body& c = zero)