2012-03-03 10 views

答えて

8

一つの方法かもしれC++ assertに似ている11のstatic_assert、しかし、コンパイル時にチェック:あなたはC++ 11を持っていない場合は

template<unsigned char I, unsigned char F> 
class FOO 
{ 
    static_assert(I >= F, "I needs to be larger or equal to F"); 
    ... 
}; 
+4

'static_assert'は宣言です。それはクラススコープ内に現れることができます。 – kennytm

+0

@KennyTMああ、クラス定義の中に入れてもいいですか?素敵な、それを知らなかった(まあ、とにかくそれを主にまだ使用していない)。 –

6

、良い古い配列境界トリックもここで動作します。 IF未満である時はいつでもこれは、「負の配列サイズ」エラーがトリガされます

static int const error_size = I >= F ? 1 : -1; 
typedef char ERROR_I_must_not_be_less_than_F[error_size]; 

:ちょうどあなたのクラスのプライベートセクションに次のように置きます。

+1

または単に 'typedef char ERROR_I_must_not_be_less_than_F [I-F]; ' – MSalters

+0

@MSalters:まあ...ええ。 +1 – Xeo

関連する問題