2010-08-13 145 views
0

我想更好地瞭解模板傳遞模板參數

我有開始像這樣在我的.h模板類:

template <class DOC_POLICY, class PRINT_POLICY, class UNDO_POLICY> 
class CP_EXPORT CP_Application : public CP_Application_Imp 

現在我需要在我的.cpp初始化如此,所以我做:

CPLAT::CP_DocumentPolicy_None * d = new CPLAT::CP_DocumentPolicy_None(); 
CPLAT::CP_PrintPolicy_None * p = new CPLAT::CP_PrintPolicy_None(); 
CPLAT::CP_UndoPolicy_None * u = new CPLAT::CP_UndoPolicy_None(); 

CPLAT::CP_Application::Init(d, p, u); 

我在CPLAT :: CP_Application :: Init(d,p,u)上得到一個錯誤;各國:

錯誤:「模板類CPLAT :: CP_Application」沒有模板參數

怎樣一個通模板參數使用?

回答

0

我相信它應該工作

CPLAT::CP_Application<CPLAT::CP_DocumentPolicy_None,CPLAT::CP_PrintPolicy_None,CPLAT::CP_UndoPolicy_None>::Init(d,p,u); 
0
  1. 你有一個類模板,而不是一個 「模板類」。這是可以從中生成類的模板。 (還有函數模板。這些是從它們生成的函數的模板。)

  2. 它需要類型參數d,pu是(指向)對象,而不是類型。類型是,例如,CPLAT::CP_DocumentPolicy_NoneCPLAT::CP_PrintPolicy_NoneCPLAT::CP_UndoPolicy_None
    所以,你應該能夠做到

    CP_Application< CPLAT::CP_DocumentPolicy_None 
           , CPLAT::CP_PrintPolicy_None 
           , CPLAT::CP_UndoPolicy_None > app; 
    
  3. 當你有函數模板,其中模板參數功能參數(它們出現在函數的參數列表類型),你可以忽略它們在實例化模板時的實際模板參數列表中:

    template< typename T > 
    void f(T obj) {...} 
    ... 
    f(42); // same as f<int>(42), because 42 is of type int 
    

    這是自動函數參數推導。

  4. 而不必調用Init成員函數,讓構造函數初始化該對象。