Bạn có thể làm điều đó với 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();
}
}
Tính năng này chỉ sẵn từ C++ 11. Nếu bạn đang mắc kẹt với C++ 03, hãy xem Boost's static assert macro.
Toàn bộ ý tưởng về đây là thông báo lỗi đẹp. Nếu bạn không quan tâm đối với những người, hoặc có thể thậm chí không affor tăng, bạn có thể làm một cái gì đó như sau:
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
}
Hãy xem [static_assert] (http://en.cppreference.com/w/cpp/language/static_assert) – juanchopanza
@juanchopanza: Đó là câu trả lời. – Nawaz
Có vẻ tuyệt vời! Nhưng có bất cứ điều gì trước C++ 11? – MciprianM