C++. Шаблоны. Параметры шаблонов как значения

Тема параметров шаблонов как значений относительно простая и очень короткая, но для лучшего понимания рекомендуется знать:

Когда говорят о шаблонах, сразу подразумевается обобщение типов, а параметры шаблоно преимущественно представляют собой конкретные типы. Но не всегда параметры шаблонов представлют собой типы, могут и обычные значения.
  • В роли параметров шаблонов могут выступать целочисленные константы (включая перечисления) или указатели на объекты с внешним связыванием.
  • Использование чисел с плавающей точкой и объектов с типом класса в качестве параметров шаблона не допускается.
Вот так может выглядет использование параметра шаблона как значения:


Вот более полный класс:

Этот пример всего лишь очень упрощённый пример того, что в параметрах шаблона могут присутствовать как типы данных, так и какие-то значения, которые типами не являются. К тому же, у шаблонов классов и не типовым параметрам и типовым параметрам можно задать значения по умолчанию. При задании значений типовым задаются типы, при задании не типовых значения. Слова "типовые" и "нетиповые" использованы мной толкьо для разделения параметров-типов и параметров не типов.


Шаблонным функциям также дозволено иметь шаблонные параметры не представляющие собой типы, а представляющие значения:


Эти параметры также могут иметь значение по умолчанию:
К сожалению, иногда задействовать параметр-значение {шаблона по умолчанию} невозможно. Туда можно подсовывать только значения, известные на момент компиляции, но не вычисляемые значения, получаемые во время работы программы. Например, ниженаписанный код не может быть скомпилирован из-за того, что переменная i вычисляется уже после запуска программы:


В листинге #4 синтаксически всё выглядит как будто бы правильно, но мы подсовываем в угловые скобки, т. е. в шаблон, значение, вычисляемое программоё во время выполнения, а шаблоны с такими работать не могут: им нужны только значения времени компиляции.
Ниже один из наиболее простых примеров, демонстрирующий работу с {параметром шаблона по умолчанию} и с {обычным параметром шаблона}. При первом заполнении мы шаблону не подаём 3-й аргумент, и параметр устанавливается в значение по умолчанию, а во втором подаём — и параметр устанавливается в значение аргумента. В результате первый массив увеличивает свои значения на 200 (как указано в параметре шаблона по умолчанию), а второй увеличивает свои на 77 (как мы и просили при установке значения в угловые скобки в месте вызова шаблонной функции).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/evgeniy-kornilov-2/programmirovanie-shahmat-i-drugih-logicheskih-igr/?lfrom=15589587
Яндекс.Метрика