2008-12-13 10 views
3

je suis en train de lire un livre sur les modèles et trouvé le morceau de code suivant:syntaxe du modèle

template <template <class> class CreationPolicy> 
class WidgetManager : public CreationPolicy<Widget> 
{ 
... 
void DoSomething() 
{ 
Gadget* pW = CreationPolicy<Gadget>().Create(); 
... 
} 
}; 

Je n'ai pas les modèles imbriqués spécifiés pour le creationPolicy (qui est à nouveau un modèle). Quelle est la signification de cette syntaxe bizarre?

Répondre

5

Cela signifie que CreationPolicy doit également être un modèle, qui accepte un paramètre de type. Vous pouvez le considérer comme un équivalent de modèle de pointeurs de fonction ou de rappels.

Comme vous pouvez le voir dans cet exemple, CreationPolicy est utilisé avec un argument:

CreationPolicy<SomeType> 

Ce ne serait pas possible, à moins CreationPolicy avait été déclarée comme « paramètre de modèle de modèle » (oui, c'est vraiment ce que ceux-ci sont appelés.)

Questions connexes