È possibile farlo con static_assert
declaration:
template<int N> void tryHarder() {
static_assert(N >= 0 && N <= 10, "N out of bounds!");
for(int i = 0; i < N; i++) {
tryOnce();
}
}
Questa funzione è solo avaliable dal C++ 11. Se sei bloccato con C++ 03, dai un'occhiata a Boost's static assert macro.
L'intera idea di questo sono messaggi di errore piacevoli. Se non si cura per coloro che, o si può nemmeno affor spinta, si potrebbe fare qualcosa nel modo seguente:
template<bool B>
struct assert_impl {
static const int value = 1;
};
template<>
struct assert_impl<false> {
static const int value = -1;
};
template<bool B>
struct assert {
// this will attempt to declare an array of negative
// size if template parameter evaluates to false
static char arr[assert_impl<B>::value];
};
template<int N>
void tryHarder()
{
assert< N <= 10 >();
}
int main()
{
tryHarder<5>(); // fine
tryHarder<15>(); // error, size of array is negative
}
Dai un'occhiata a [static_assert] (http://en.cppreference.com/w/cpp/language/static_assert) – juanchopanza
@juanchopanza: questa è la risposta. – Nawaz
Sembra fantastico! Ma c'è qualcosa di pre-C++ 11? – MciprianM