我想能够执行某些关于“非类型”类别模板参数的规则。 这是可能的吗?
例如,在“MIN”和“Lex”之间,考虑一个模版的“Cycle”类别,通过“TYPE”类数值进行周期。
基本的第一步可能看起来像这样:
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;
How would I change the above so that the rule MIN <= MAX always holds? I.e. How do I make sure a programmer using the line
Cycle<int, 0, 23> hoursInADay;
允许使用线路的节目设计师。
Cycle<int, 23, 0> hoursInADay;
何时将警告说,声明是不可接受的?