2012-12-13 61 views
1

为什么下面的print“Generic”而不是“const A &”?我猜测一个dynamic_cast<>可能会打电话给第一个f,但事实并非如此。为什么是这样?模板参数扣除不能按预期方式工作

struct A {}; struct B : A {}; 

template <const A &> void f() { std::cout << "const A &"; } 
template <typename T> void f(T) { std::cout << "Generic"; } 

int main() { 

    B b; 

    f(dynamic_cast<const A &>(b)); // "Generic" 

} 

回答

5

第一f()不接受一个参数,只留下f(T)作为搭配。

+0

谢谢。我仍然有这个问题,但你回答了第一个也是最重要的问题,所以我不会用后续的方法来轰炸你。 –

+0

@typedeftypename,只是发布一个新的问题。它会得到更多的关注,我相信有人能够提供帮助。 – hmjd

相关问题