簡體   English   中英

在C ++模板中省略參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM