Sie können es mit 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();
}
}
Diese Funktion ist nur avaliable da C++ 11. Wenn Sie mit C++ 03 festgefahren sind, werfen Sie einen Blick auf Boost's static assert macro.
Die ganze Idee davon sind nette Fehlermeldungen. Wenn Sie nicht für diejenigen kümmern, oder kann nicht einmal affor Schub, könnten Sie etwas tun, wie folgt:
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
}
Siehe [static_assert] (http://en.cppreference.com/w/cpp/language/static_assert) – juanchopanza
@juanchopanza: Das ist die Antwort. – Nawaz
Es sieht gut aus! Aber gibt es irgendetwas vor C++ 11? – MciprianM