Как уже говорилось, я не думаю, что вы можете.Однако, если вы измените его на что-то вроде:
struct Index {
enum { X, Y, SIZE};
};
, тогда ваш шаблон может выглядеть примерно так:
template <class Enum>
class Array {
// ...
private:
int array[Enum::SIZE];
};
... и если тип вы передаете как Enum
не содержит некоторой положительной константы с именем SIZE
, инстанцирование не будет компилироваться.Для данной цели вы бы предпочли, чтобы Index
было пространством имен, но поскольку пространство имен не является типом, я не думаю, что вы можете использовать его в качестве аргумента шаблона.
Я должен добавить, однако, что я не уверен, что мне вообще нравится эта идея - большинство людей будут думать, что Array<type>
означает, что вы создаете массив Type
объектов, и это явно что-то совершенно другоеиз этого ...