我嘗試使用默認模板引數撰寫此函式:
template<typename A, typename B>
void func(int i1, int i2, A a, B b = 123){
...
}
在我的腦海里,我可以這樣呼叫:func(1, 2, 3)和編譯器應該推斷型別B為int從默認值,但我得到no instance of overloaded function。
在這種情況下,C 構造和編譯器無法推斷型別是否不正確?
uj5u.com熱心網友回復:
不能從默認引數推匯出函式中模板引數的型別。如cppreference.com上的示例所示:
不能從函式默認引數的型別推匯出型別模板引數:
template<typename T> void f(T = 5, T = 7); void g() { f(1); // OK: calls f<int>(1, 7) f(); // error: cannot deduce T f<int>(); // OK: calls f<int>(5, 7) }
但是,您可以為模板引數指定默認引數:
template<typename A, typename B = int>
void func(int i1, int i2, A a, B b = 123){
...
}
uj5u.com熱心網友回復:
通常當默認引數不起作用時,您可以使用多載:
template<typename A, typename B>
void func(int i1, int i2, A a, B b){
...
}
template<typename A>
void func(int i1, int i2, A a){
func(i1,i2,a,123);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370013.html
上一篇:如何使用wget/curl從GitHub企業存盤庫下載發布工件?
下一篇:模板引數推導在C 14上失敗
