2
我希望能夠對類的「非類型」模板參數執行某些規則。這可能嗎?對「非類型」模板參數執行規則
例如,考慮循環遍歷值「MIN」和「MAX」之間的類型「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;
我將如何改變上面,以便將規則MIN < = MAX一貫主張?即我如何確保使用線路
Cycle<int, 0, 23> hoursInADay;
將被允許程序員,但使用的線
Cycle<int, 23, 0> hoursInADay;
將在編譯時警告說,不能接受的申報程序員?
只是好奇,會'MAX + 1> MIN'結果語法錯誤? – fredoverflow 2012-01-15 13:42:51
@FredOverflow:爲什麼呢? 'i_must_be_true <(MAX > MIN - 1)>'非常好:-) – 2012-01-15 13:44:03
static_assert似乎很有魅力。非常感謝。 – JimmidyJoo 2012-01-15 13:46:27