2012-03-03 11 views

risposta

8

Un modo può essere C++ 11 di static_assert, che è simile a un assert, ma controllato in fase di compilazione:

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' è una dichiarazione. Può apparire in ambito di classe. – kennytm

+0

@KennyTM Ah Ok, quindi posso solo inserirlo nella definizione della classe? bello, non lo sapevo (beh, non l'ho ancora usato in gran parte, comunque). –

6

Se non si dispone di C++ 11, anche qui il buon vecchio trucco per i limiti dell'array funziona. Basta mettere quanto segue nella sezione privata della classe:

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

questo innescherà un errore di "dimensione della matrice negativo" ogni volta I è inferiore a F.

+1

O semplicemente 'typedef char ERROR_I_must_not_be_less_than_F [I-F];' – MSalters

+0

@MSalters: Beh ... sì. +1 – Xeo