В чем разница между понятиями c ++ 0x и ограничениями c #? - PullRequest
5 голосов
/ 31 января 2009

C ++ 0x вводит концепции , которые позволяют вам определить, в основном, тип типа. Указывает свойства, требуемые для типа .

C # позволяет указать ограничений универсального шаблона с предложением " где ".

Есть ли между ними какая-то семантическая разница?

Спасибо.

1 Ответ

9 голосов
/ 31 января 2009

Следует иметь в виду, что шаблоны C ++ и дженерики C # не совсем одинаковы. См. ответ для более подробной информации об этих различиях.

На странице, на которую вы ссылались с объяснением концепций C ++ 0x, звучит идея, что в C ++ вы хотите указать, что тип шаблона реализует определенные свойства. В C # ограничение идет дальше этого и заставляет универсальный тип быть «из» этого ограничения. Например, следующий код C #:

public GenericList<T> where T : IDisposable

говорит, что любой тип, используемый вместо T , должен реализовывать интерфейс IDisposable. Аналогично, следующий код:

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

public GenericList<T> where T : ABC

говорит, что любой тип, используемый вместо T, должен иметь тип ABC или производный от ABC.

Идея концепции C ++ 0x говорит только о том, что тип, используемый вместо T, должен иметь те же свойства, что определены ABC (или IDisposable), но не должен быть того типа.

...