Quelle est la différence entre les concepts c ++ 0x et les contraintes c #?
-
20-08-2019 - |
Question
C ++ 0x introduit les concepts , qui vous permettent de définir, en gros, un type d'un type. Il spécifie les propriétés requises d'un type .
C # vous permet de spécifier les contraintes d'un générique avec le " où & Quot; clause.
Y a-t-il une différence sémantique entre eux?
Merci.
La solution
Une chose à garder à l'esprit est que les modèles C ++ et les génériques C # ne sont pas exactement les mêmes. Voir cette réponse pour plus de détails sur ces différences.
Dans la page à laquelle vous avez accédé pour expliquer les concepts C ++ 0x, il semble que l’idée soit que vous souhaitez pouvoir spécifier en C ++ que le type de modèle implémente certaines propriétés. En C #, la contrainte va plus loin que cela et force le type générique à être & Quot; of & Quot; cette contrainte. Par exemple, le code C # suivant:
public GenericList<T> where T : IDisposable
indique que tout type utilisé à la place de T doit implémenter l'interface IDisposable. De même, le code suivant:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
dit que tout type utilisé à la place de T doit être de type ABC ou dérivé de ABC.
L'idée de concept C ++ 0x indique seulement que le type utilisé à la place de T doit avoir les mêmes propriétés que celles définies par ABC (ou IDisposable), mais pas qu'il doit être de ce type.