2010-08-13 6 views
0

Je suis en train de comprendre les modèles mieuxLes paramètres de modèle Passer

J'ai une classe de modèle qui commence comme ça dans mon .h:

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

Maintenant je dois initialiser donc dans mon Cpp donc je faire:

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); 

j'obtenir une erreur sur CPLAT :: CP_Application :: Init (d, p, u); qui stipule:

erreur: « classe modèle CPLAT :: CP_Application » utilisé sans paramètres de modèle

Comment peut-on les paramètres du modèle de passe?

Répondre

0

je crois qu'il devrait travailler

CPLAT::CP_Application<CPLAT::CP_DocumentPolicy_None,CPLAT::CP_PrintPolicy_None,CPLAT::CP_UndoPolicy_None>::Init(d,p,u); 
0
  1. Vous avez un modèle de classe , pas une "classe de modèle". C'est un modèle à partir duquel les classes peuvent être générées. (Il y a aussi modèles de fonction. Ce sont des modèles dont les fonctions sont générées.)

  2. Il faut paramètres de type. d, p et u sont des pointeurs vers des objets et non des types. Les types sont, par exemple, CPLAT::CP_DocumentPolicy_None, CPLAT::CP_PrintPolicy_None et CPLAT::CP_UndoPolicy_None.
    Donc, vous devriez être en mesure de faire

    CP_Application< CPLAT::CP_DocumentPolicy_None 
           , CPLAT::CP_PrintPolicy_None 
           , CPLAT::CP_UndoPolicy_None > app; 
    
  3. Lorsque vous avez des modèles de fonction, où paramètres du modèle sont aussi des paramètres fonction (ils apparaissent comme les types dans la liste des arguments de la fonction), vous pouvez les omettre dans la liste des arguments de modèle réels lors de l'instanciation du modèle:

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

    Ceci est la déduction automatique des arguments de fonction.

  4. Au lieu d'avoir à appeler une fonction membre Init, demandez au constructeur d'initialiser l'objet.

Questions connexes