Возвращаяськ списку параметровСписок параметров похож на сигнатуру функции: он определяет количество и вид каждого параметра и назначает каждому из них уникальный идентификатор, так что каждый параметр имеет уникальное имя в области действия шаблона.Параметры служат для подстановки внутри определения шаблона или обобщенного типа. Пользователь создает экземпляры объекта, указывая реальные значения, которые подставляются вместо параметров. Однако создание экземпляра параметризированного типа не является простой подстановкой типов, как, например, в механизме раскрытия макросов. Если точнее, это связывание значений, указанных пользователем, с соответствующими формальными параметрами внутри определения типа.У параметров обобщенных классов должен быть тип Object или производный от него. Как вы потом увидите, это ограничивает операции, которые можно выполнять над объектами, объявленными при помощи параметра-типа. Вы можете обойти данное ограничение, явно указав собственные ограничения. В этом случае явно задается базовый класс или набор интерфейсов, потомки которых могут выступать в роли аргумента-типа.Кроме параметров-типов, шаблоны поддерживают выражения и параметры-шаблоны (в том числе их значения по умолчанию). Их значения вычисляются по позиции, а не по имени. Оба механизма используют ключевые слова class или typename для обозначения параметров-типов.Дополнительные возможности списка параметровШаблоны поддерживают еще два вида параметров: параметры-шаблоны и параметры, отличные от параметров-типов. Последние должны быть константами. Вы должны запомнить, что константы могут быть либо строковыми, либо числовыми. К примеру, если вы решили создать стек фиксированного размера, то можете указать параметр, отличный от параметра-типа и задающий размер стека, а также параметр-тип элемента, и тогда стек будет отличаться по категориям «тип элемента» и «размер». Рассмотрим стек фиксированного размера с параметром, отличным от параметра-типа (рис. 1).К тому же, было бы удобно, если бы разработчик шаблонного класса заранее указал значение по умолчанию для одного или обоих параметров. Например, оптимальный размер буфера по умолчанию равен 1 Кб. При использовании механизма шаблонов значение по умолчанию может быть назначено так:// Объявление шаблона со значением параметра по умолчаниюtemplate <class elemType, int size = 1024>public ref class FixedSizeStack {};Пользователь мог бы изменять значение по умолчанию, явно задавая значение второго параметра следующим образом:// Стек размером максимум 128 экземпляров StringFixedSizeState<String^, 128> ^tbs = gcnew FixedSizeStack<String^, 128>;или же не подставлять значение второго аргумента и использовать значение по умолчанию:// Стек для 1024 строк (экземпляров String)FixedSizeStack<String^> ^tbs = gcnew FixedSizeStack<String^>;Подобное применение значений по умолчанию естественно для стандартной библиотеки шаблонов C++ (STL). К примеру, следующие определения взяты из стандарта ISO-C++:// Примеры значений по умолчания для параметров-типо
С выпуском Visual Studio 2005 в Microsoft .NET Frame-work появится поддержка модели параметризованных типов для обобщенного программирования. C++/CLI поддерживает два вида механизмов параметризации: обобщения CLR (общеязыковой исполняющей среды) и шаблоны C++. В предыдущей статье (msdn.microsoft.com/msdnmag/issues/05/04/pureC) я рассмотрел характеристики, общие для обоих механизмов. В этой статье мы обсудим их различия, в частности по списку параметров и модели ограничения типов.
Обобщения CLR против шаблонов C++
Поможем нашему домику на "карте интернета" расположиться поближе к центру мира!
Обобщения CLR против шаблонов C++ | Visual C++ | Статьи | CodingClub.NET - клуб программистов, программирование .NET, C#, C++, PHP, статьи, базы данных, скачать, книги, файлы
Комментариев нет:
Отправить комментарий