Я хочу иметь возможность применять определенные правила для шаблонных параметров "нетиповых" классов. Возможно ли это?
Например, рассмотрим шаблонный класс «Cycle», который циклически перебирает значения типа «TYPE» между значениями «MIN» и «MAX».
Базовый первый шаг может выглядеть примерно так:
template <class TYPE, TYPE MIN, TYPE MAX>
class Cycle
{
public:
Cycle() :
m_value(MIN)
{
}
const TYPE & value() const
{
return m_value;
}
void up()
{
if (m_value == m_max)
m_value = m_min;
else
++m_value;
}
void down()
{
if (m_value == m_min)
m_value = m_max;
else
--m_value;
}
private:
TYPE m_value;
static TYPE m_min;
static TYPE m_max;
};
template <class TYPE, TYPE MIN, TYPE MAX>
TYPE Cycle<TYPE, MIN, MAX>::m_min = MIN;
template <class TYPE, TYPE MIN, TYPE MAX>
TYPE Cycle<TYPE, MIN, MAX>::m_max = MAX;
Как бы я изменил вышеприведенное, чтобы правило MIN <= MAX всегда выполнялось? То есть Как сделать так, чтобы программист использовал строку </p>
Cycle<int, 0, 23> hoursInADay;
будет разрешено, но программист использует строку
Cycle<int, 23, 0> hoursInADay;
будет предупрежден во время компиляции, что объявление неприемлемо?