2010-11-06 4 views
1

Je regardais le code du modèle de vecteur STL C++ pour comprendre exactement comment il est implémenté. J'ai très compréhension de base de la programmation du modèle, pourriez-vous donner une explication claire de l'expressionExplication de déclaration de modèle

typename _Alloc = std::allocator<_Tp> 
extrait

du vecteur STL comme ci-dessous:

template<typename _Tp, typename _Alloc = std::allocator<_Tp> > 
class vector : protected _Vector_base<_Tp, _Alloc> 

Merci pour toute l'aide

Répondre

2

Cette attribue un type par défaut à un paramètre de modèle, de sorte que vous ne devez pas ajouter chaque fois que vous créez un vecteur:

std::vector<int> v; 

Par défaut, le deuxième paramètre du modèle est rempli par le type std::allocator<_Tp>.

Les paramètres de modèle par défaut permettent de raccourcir les déclarations de données en incluant certaines fonctionnalités par défaut (que vous pouvez remplacer en donnant simplement un second paramètre à la déclaration du modèle).

+0

Merci diego ... – blueskin

1

classe Les paramètres du template peuvent avoir des arguments par défaut tout comme les fonctions vous permettent d'avoir des arguments par défaut pour les paramètres de la fonction.

Cela vous permet d'utiliser std::vector avec un seul argument de modèle, le type de valeur, sans avoir à spécifier explicitement l'allocateur, puisque la plupart du temps vous voulez l'allocateur par défaut de toute façon.

Ce

std::vector<int> 

est exactement le même que

std::vector<int, std::allocator<int> > 
+0

Merci james. Savez-vous s'il y a un article ou un livre qui expliquera, la conception du code STL? Je veux comprendre comment la bibliothèque est conçue – blueskin

+1

@reddy: Il y a une [liste de bons livres C++] (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list) ici sur Stack Overflow. Ce qui vous serait le plus utile dépend de ce que vous voulez apprendre exactement. –