C++ typename關鍵字

C++中typename關鍵字

下面是摘自https://zh.cppreference.com/w/cpp/keyword/typename的描述函數

 

C++中的typename關鍵字常見於模板使用spa

例如:code

  1. 代替class關鍵字blog

    template < typename T >繼承

    這裏typenameclass關鍵字的功能同樣,是爲了取代class關鍵字而生,緣由是class用來表明非類類型時有點歧義,例如用class表明struct類型、int、double類型,這樣顯得不三不四。作用域

  2. 在模板中獲取變量類型get

    示例1:編譯器

 1 template <class T>
 2 void foo() {
 3     typename T::iterator * iter;  // typename用於告訴編譯器,T::iterator是一個類型而不是一個變量;不然編譯器可能認爲它是一個乘法操做
 4 }
 5 
 6 struct ContainsAType {
 7     struct iterator;
 8 };
 9 
10 foo<ContainsAType>();

    示例2:it

      typename A<T>::k var;      // var變量是A類裏面的k變量的類型,這裏等同於static int var;編譯

      const typename A<T>::B& func();  // func()返回值是const A做用域下B類的引用

      typedef typename A<T>::B BType;  // 給A做用域下的B類 類型取一個別名爲BType

      int func(typename A<T>::k var);    // func函數的參數是A::k類型(static int)

      template < typename T, typename Containter = std::deque<T> > class stack;

      上面的四個例子已經表示typename至關於獲取變量的類型

 繼承類的列表和參數初始化列表不能出現typename,由於編譯器知道繼承類的列表必須是類型,參數初始化列表必須是變量,例如:

 1 template<class T>
 2 class Derived: public Base<T>::XXX, public A<T>::YYY  // 父類列表,絕對是類型不多是變量
 3 {
 4   ...
 5 }
 6 
 7 Derived(int x, int y) : Base<T>::XXX(x), A<T>::YYY(y)  // 參數初始化列表,絕對是變量而不多是類型
 8 {
 9   ...
10 }
相關文章
相關標籤/搜索