Да, вы можете параметризовать шаблоны по нетипичным аргументам, таким как целые числа, указатели и другие шаблоны.Например:
template <typename T, int N> struct Array {
T data[N];
/* ... other functions ... */
};
Эти шаблоны работают так же, как и все другие шаблоны, которые вы видели, за исключением того, что они параметризованы по целым значениям, а не по типам. имеет больше информации по этому вопросу.«Современный дизайн C ++» и «Шаблоны C ++: Полное руководство» также содержат много информации о том, как это сделать.