型別名

  1. 當後跟一個限定名稱時,typename 指定它是一個型別的名稱。這通常在模板中是必需的,特別是當巢狀名稱說明符是除當前例項化之外的依賴型別時。在此示例中,std::decay<T> 取決於模板引數 T,因此為了命名巢狀型別 type,我們需要使用 typename 為整個限定名稱新增字首。有關更多詳細資訊,請參閱 模板typename 關鍵字的位置和原因?

    template <class T>
    auto decay_copy(T&& r) -> typename std::decay<T>::type;
    
  2. 模板的宣告中引入型別引數。在這種情況下,它可以與 class 互換。

    template <typename T>
    const T& min(const T& x, const T& y) {
        return b < a ? b : a;
    } 
    

Version >= C++ 17

  1. typename 也可以在宣告引數名稱前面的模板模板引數時使用,就像 class 一樣。

    template <template <class T> typename U>
    void f() {
        U<int>::do_it();
        U<double>::do_it();
    }