J'aimerais connaître les définitions précises mais succinctes de ces trois concepts au même endroit. La qualité de la réponse doit dépendre des deux points suivants. P>
Il y a probablement de nombreuses réponses correctes depuis que chaque concept a de nombreuses facettes différentes. Si EM> Il y a beaucoup de bonnes réponses, je finirai éventuellement à résoudre la question en CW et à agréger les réponses. p>
- Post Accepter Edition - P>
Boost a une belle Article sur des concepts de programmation générique P>
3 Réponses :
Un concept est un ensemble d'exigences qu'un type doit satisfaire pour modéliser le concept.
Par exemple, un type concepts peut former des hiérarchies de raffinement. Concept concepts sont utilisés pour limiter l'ensemble des types qu'un modèle peut être spécialisé avec. Par exemple, l'algorithme Notez que les concepts sont des objets informels utilisés dans la norme C ++ et divers documents . La langue ne prend pas en charge les concepts directement ( pourtant ). P> p> t code> est
moins -ancomparable code> si pour un Paire d'objets
A code> et
B code> de type
t code> L'expression
A est bien formé, convertible vers < Code> BOOL code> et induit une relation de commande stricte faible. Le type
INT code> est un exemple d'un modèle de
Mestimomparable code>. P>
A code> est un raffinement du concept
B code> si les exigences de
A code> sont une superset des exigences du
B code>. Par exemple,
Bidirectionaliterator code>
est un raffinement de < Un href = "http://www.sgi.com/tech/stl/forworatiterator.html" rel = "nofollow noreferrer"> Forfaititerator code> . p>
std :: tri code> peut accepter une paire d'objets tant qu'ils modélisent
aléatoireAccessiterator code>
. p>
a.o. La documentation SGI fait référence au "modèle" sur ce qui a été introduit en tant que "concepts" dans une proposition C ++ 0X: c'est l'équivalent de compilation équivalente à une "interface" dans la modélisation OO. Il résume les exigences que le code générique pose sur un paramètre de modèle. P>
Comme exemple, vous pouvez dire que les paramètres La stratégie em> est une autre chose: il fait un algorithme modifiable de l'extérieur. Un bon exemple est le paramètre OUTPUTITERATORATORATORATOR (code> de la fonction
STD :: Transform code> doivent mettre en œuvre
opérateur ++ () code> et
et
et
opérateur = (t) code> Pour que la fonction fonctionne. p>
allocator code> usagé des conteneurs STL: il indique à l'algorithme comment allouer de la mémoire. Si on veut, on peut faire un
std :: vecteur
a concept em> est un ensemble d'exigences sur un type. Par exemple, vous pourriez avoir un concept appelé "RandomAsstibleable", qui place l'exigence sur un type qui implémente Comme les concepts ont été supprimés. À partir de la norme C ++ à venir, elles n'existent que de manière intangible en C ++ comme documentation. Par exemple, vous pouvez lire Description de SGI du concept de conteneur . P > Lorsqu'un type répond à toutes les exigences d'un concept, vous appelez cela un modèle em> de ce concept. Par exemple, Enfin, une stratégie est une unité de comportement, qui peut être combinée à d'autres unités de comportement pour créer des classes complexes. Par exemple, disons que vous vouliez créer deux classes: une matrice de taille fixe et une matrice redimensionnable dynamiquement. Ces deux classes ont beaucoup de fonctionnalités partagées, mais elles diffèrent simplement dans leurs mécanismes de stockage et certaines de leurs fonctionnalités (par exemple, vous ne pouvez pas appeler opérateur [] (int) code> in o (1) heure.
std :: vecteur code> est un modèle du concept de conteneur (ou, de manière équivalente
std :: vecteur code> "modèles" conteneur). P>
push_back code> sur une matrice de taille fixe). P>
int main()
{
array<int, fixed_storage<int, 10> > fixed_array;
array<int, dynamic_storage<int> > dynamic_array;
dynamic_array.push_back(1);
fixed_array[9] = dynamic_array[0];
}