2012-12-13 80 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

相關問題