В чем разница между концепциями C++0x и ограничениями C#?
C++0x вводит понятия, которые позволяют вам определить, в основном, тип типа. Он определяет свойства, требуемые для типа.
C# позволяет вам указывать ограничения универсального с предложением " где".
Есть ли между ними смысловая разница?
Спасибо.
1 ответ
Следует иметь в виду, что шаблоны 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), но не должен быть того же типа.