2012-03-03 30 views

Trả lời

8

Một cách có thể là C++ 11 của static_assert, mà là tương tự như một assert, nhưng kiểm tra tại thời gian biên dịch:

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' là khai báo. Nó có thể xuất hiện trong phạm vi lớp. – kennytm

+0

@KennyTM Ah Ok, vì vậy tôi có thể đặt nó vào trong định nghĩa lớp học? tốt đẹp, không biết rằng (tốt, chưa sử dụng nó phần lớn nào được nêu ra, anyway). –

6

Nếu bạn không có C++ 11, tốt cũ mảng giới hạn lừa hoạt động ở đây quá. Chỉ cần đặt sau trong phần riêng của lớp học của bạn:

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

này sẽ kích hoạt một lỗi "kích thước mảng tiêu cực" bất cứ khi nào I là ít hơn F.

+1

Hoặc chỉ 'typedef char ERROR_I_must_not_be_less_than_F [I-F];' – MSalters

+0

@MSalters: Vâng ... vâng. +1 – Xeo

Các vấn đề liên quan