Шаблонными в MQL5 можно сделать функции, объектные типы (классы, структуры, объединения) или отдельные методы внутри них. В любом случае описание шаблона имеет заголовок:
template <typename T[, typename Ti, ... ]> |
Заголовок начинается с ключевого слова template, за которым в угловых скобках, через запятую перечисляются формальные параметры: каждый параметр обозначается ключевым словом typename и идентификатором. Идентификаторы должны быть уникальными внутри конкретного определения.
Ключевое слово typename в заголовке шаблона сообщает компилятору, что идущий следом идентификатор следует рассматривать как заместитель типа. В будущем компилятор MQL5, вероятно, поддержит другие виды параметров, не являющихся типами, как это делает компилятор C++.
Не следует путать данное применение typename и встроенный оператор typename, возвращающий строку с названием типа переданного аргумента.
После заголовка шаблона следует привычное определение функции (метода) или класса (структуры, объединения), в котором формальные параметры шаблона (идентификаторы T, Ti) используются в инструкциях и выражениях в тех местах, где синтаксис требует наличия названия типа. Например, для шаблонных функций параметры шаблона описывают типы параметров функции или возвращаемого значения, а в шаблонном классе параметр шаблона может обозначать тип поля.
Шаблоном является всё определение целиком. Шаблон заканчивается вместе с определением сущности (функции, метода, класса, структуры, объединения), перед которой был заголовок template.
Для имен параметров шаблонов принято брать одно- или двухсимвольные идентификаторы в верхнем регистре.
Минимальное количество параметров — 1, максимальное — 64.
Основные варианты использования параметров (на примере параметра T) включают: