2012-03-03 33 views
5

derleme kısıtlamaları varsayalım ben şablonu AslındaC++ şablonu: zaman

template<unsigned char I, unsigned char F> 
class FOO 
{ 
    .... 
} 

aşağıdakilere sahip metalik konstrüksiyonları koymak nasıl, ben gerektirir (ı> = F). Birisi, bir derleme hatası vermeyi umarız. Bu nasıl yapılır?

Teşekkür

cevap

8

bir yolu olabilir C++ bir assert benzer 11 en static_assert, ama derleme zamanında kontrol: C++ 11 yoksa

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' bir bildirimdir. Sınıf kapsamında görünebilir. – kennytm

+0

@KennyTM Ah Ok, ben sadece sınıf tanımının içine koyabilir miyim? Güzel, bilmiyordum (yine de, zaten büyük ölçüde, henüz kullanmadım). –

6

, iyi eski dizi hileler de burada çalışır. Sadece sınıfın özel bölümünde aşağıdaki koymak: IF az olduğunda

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

Buna "negatif dizi boyutunda" hatası tetikleyecektir.

+1

Ya da sadece yazım hatası ERROR_I_must_not_be_less_than_F [I-F]; – MSalters

+0

@MSalters: Şey ... evet. +1 – Xeo