Абсолютно!Вы можете открыть параметры шаблона, написав функцию для их передачи.
Ваша попытка не удалась только потому, что:
- вы пытались повторно использовать имя аргумента шаблона для элемента данныхname и
- вы фактически никогда не присваивали значение элементу данных.
В любом случае здесь нет необходимости в дополнительном элементе данных, так как аргумент шаблона доступен для всего классаопределение.
Итак, для такого типа шаблона, как ваш, просто:
template <int size_of_array>
class arr
{
public:
static int size_of() { return size_of_array; }
};
Теперь arr<42>::size_of()
равно 42!
(I 'мы сделали это static
, не потому, что вам нужно, а потому, что в этом примере это имеет смысл; вы могли бы сделать его не-static
, но const
функцией-членом.)
И для типа:
template <typename T>
class arr
{
public:
using array_size_t = T;
};
Теперь arr<T>::array_size_t
это тип T
!