2
クラスの「非タイプ」テンプレートパラメータに対して特定の規則を適用したいと考えています。これは可能ですか?「非タイプ」テンプレートパラメータの規則を適用する
たとえば、 "MIN"と "MAX"の値の間のタイプ "TYPE"の値を循環するテンプレートの "Cycle"クラスを考えてみましょう。
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
@FredOverflow:なぜでしょうか? 'i_must_be_true <(MAX > MIN - 1)>'完全にいいです:-) –
static_assertは魅力的なようです。どうもありがとう。 – JimmidyJoo