2015-12-06 83 views
-1

我想實現一類,稱之爲K,當作爲模板類C.這裏的模板參數傳遞的代碼示例以下代碼編譯:如何實現可以作爲模板參數傳遞的類?

template <typename T> 
class C 
{ 
    typename T::counter_type counter; 
public: 
    C() : counter(0) {} 
    void Do (T t) 
    { 
     if (t>0) ++counter; 
    } 
}; 

class K 
{ 

}; 

誰能幫我瞭解執行?

+0

'struct K {typedef some_integral_type counter_type; };'或者'struct K {using counter_type = some_integral_type; };' – user657267

+1

編譯,添加錯誤消息所要求的功能。 –

回答

0

你有什麼是模板類。模板參數基本上是一種數據類型,它定義了內部數據類型的類型。

想想std :: vector的實現。它有一個內部數組,但類型是什麼?那麼,你可以指定該類型作爲模板參數。在您的課程中,您聲明類型爲typename T::counter_type的計數器(有關類型名稱的更多信息,請參閱:When is the "typename" keyword necessary?),然後您有一個將計數器初始化爲0的構造函數以及一個方法Do,該方法接受的類型爲T(在對象聲明中指定)並用它做一些事情。

請參閱模板以簡寫。相反,具有:

class C_int 
{ 
    int counter; 
public: 
    C() : counter(0) {} 
    void Do (int t) 
    { 
     if (t>0) ++counter; 
    } 
}; 

class C_long 
{ 
    long counter; 
public: 
    C() : counter(0) {} 
    void Do (long t) 
    { 
     if (t>0) ++counter; 
    } 
}; 

你現在有分別爲C<int>C<long>

相關問題