Инстанцирование шаблонов при определенных условиях
От: Дмитро  
Дата: 06.05.03 10:10
Оценка:
Привет всем!

У меня есть шаблонный класс. Как сделать так, чтобы он инстанцировался только при определенных параметрах шаблона?

Например, таком классе Array параметр size должен быть больше нуля.
template<int size /* : (size > 0) */ >
struct Array {
     // . . .
};
// . . .
Array<10> aRightArray; // здесь все нормально
Array<-5> aWrongArray; // a здесь должна возникнуть ошибка компиляции.


Пробовал сделать так:
template<bool> struct Assert;
template<> struct Assert<true> {};

template<int size>
struct Array: Assert<(size > 0)> {
     // . . .
};

Это работает, но если от Array наследовать другой класс тоже с Assert'ом, то компилятор (VC7) выдает ворнинг, мол, Assert<true> уже является предком.
// . . .
template<int size>
struct OddSizeArray: Array<size>, Assert<(size%2 != 0)> {
     // . . .
};


А наследовать Assert виртуально не хочется, поскольку из-за этого увеличивается размер класса.

Спасибо.

--
Дмитрий
--
Дмитрий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.