Pregunta

C ++ 0x introduce conceptos , que le permiten definir, básicamente, un tipo de tipo. Especifica las propiedades requeridas de un tipo .

C # le permite especificar restricciones de un genérico con " donde & Quot; cláusula.

¿Hay alguna diferencia semántica entre ellos?

Gracias.

¿Fue útil?

Solución

Una cosa a tener en cuenta es que las plantillas de C ++ y los genéricos de C # no son exactamente iguales. Consulte esta respuesta para obtener más detalles sobre esas diferencias.

Desde la página que vinculó para explicar los conceptos de C ++ 0x, parece que la idea es que en C ++ desea poder especificar que el tipo de plantilla implementa ciertas propiedades. En C #, la restricción va más allá y obliga al tipo genérico a ser & Quot; de & Quot; esa restricción Por ejemplo, el siguiente código C #:

public GenericList<T> where T : IDisposable

dice que cualquier tipo usado en lugar de T debe implementar la interfaz IDisposable. Del mismo modo, el siguiente código:

public abstract class ABC {}
public class XYZ : ABC {}

public GenericList<T> where T : ABC

dice que cualquier tipo usado en lugar de T debe ser de tipo ABC o derivado de ABC.

La idea de concepto de C ++ 0x solo dice que el tipo utilizado en lugar de T debe tener las mismas propiedades definidas por ABC (o IDisposable), no que debe ser de ese tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top