Я сейчас читаю эту книгу, шаблоны на C++: Полное руководство. На пункте я застрял не мог понять терминологию, здесь есть пункт:Некоторые путаницы в шаблонах C++
Основной принцип заключается в том, что любой аргумент шаблона должен быть количество или значение, которое может быть определено во время компиляции. Как становится ясно позже, это требование приводит к существенным преимуществам для затрат времени на создание шаблонных объектов. Поскольку параметры шаблона в конечном итоге заменяются значениями времени компиляции, они могут сами использовать для формирования выражений времени компиляции. Это было использовано в шаблоне ArrayInClass , чтобы определить массив массивов-членов. Размер массива должен быть так называемым константным выражением, а параметр N квалифицируется как таковой.
Мы можем выдвинуть это рассуждение немного дальше: Поскольку шаблон параметров во время компиляции сущность, они также могут быть использованы для создания действительных аргументов шаблона. Ниже приведен пример:
template <typename T>
class Dozen {
public:
ArrayInClass<T,12> contents;
};
Обратите внимание, как в этом примере имя Т является как параметр шаблона и аргумент шаблона а. Таким образом, имеется механизм, позволяющий построить более сложные шаблоны с более простыми формами . Конечно, это принципиально не отличается от механизмов, которые позволяют нам собирать типы и функции.
Я ничего не могу понять. Я очень ценю любую помощь с простыми и понятными словами.
Edit:
Arrayinclass:
template <typename T, int N>
class ArrayInClass {
public:
T array[N];
};
Какая конкретная часть этого вы не понимаете? Вы понимаете фрагмент кода? –
@ Oli, я понимаю код, но не могу понять смелый параграф. –
Можете ли вы сузить то, что вы не понимаете? это большая и сложная тема. – Kevin