[英]Omitting arguments in C++ Templates
調用模板函數時,可以省略函數名后面的類型嗎?
例如,考慮一下這個功能
template
<typename T
> void f(T var){...};
可以這樣簡單地調用它:
int x = 5;
F(X);
或者我必須包括類型?
int x = 5;
f<int
>(x);
每當編譯器可以從函數參數推斷出模板參數時,就可以將它們排除在外。 這也是一種很好的做法,因為它可以使您的代碼更易於閱讀。
此外,您只能保留結尾的模板參數,而不是開頭或中間:
template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}
int main() {
f<int>(5); // NOT LEGAL
f<int, int>(5); // LEGAL
g<int>(5); // LEGAL
g<int, int>(5); // LEGAL
return 0;
}
使用隱式模板參數調用它沒有任何問題。 編譯器會告訴您它是否混淆,在這種情況下,您可能必須顯式定義模板參數才能調用該函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.