Привет всем!
У меня есть шаблонный класс. Как сделать так, чтобы он инстанцировался только при определенных параметрах шаблона?
Например, таком классе 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 виртуально не хочется, поскольку из-за этого увеличивается размер класса.
Спасибо.
--
Дмитрий