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 " & Quot; clause.

Y a-t-il une différence sémantique entre eux?

Merci.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top