Tôi có một vấn đề khá phổ biến trong mã mà tôi đang viết tại thời điểm mà tôi muốn có một số nguyên chỉ có thể tồn tại trong một phạm vi nhất định trong đó phạm vi là [bắt đầu, kết thúc). Về cơ bản, tôi muốn có thể thực hiện một số việc như sau:Có lớp Cyclic Integer chuẩn trong C++ không?
cyclic_int ci(4, 8);
ci = 4;
assert(ci == 4);
ci += 3;
assert(ci == 7);
ci += 2;
assert(ci == 5);
assert(ci == 13);
Và tất cả điều đó sẽ trở lại đúng. Về cơ bản các lớp tự động áp dụng modulus (%) cho tôi và số nguyên hoạt động như một số nguyên cyclic trong phạm vi mà tôi bắt đầu với nó. Tôi có thể thực hiện lớp này bản thân mình và quá tải tất cả các nhà khai thác phổ biến để làm cho nó hoạt động độc đáo với các số nguyên bình thường nhưng nó có vẻ giống như một lớp hữu ích mà ai đó có thể đã làm trước đây. Vì vậy, câu hỏi của tôi là, có một lớp học phổ biến như thế này ra có một nơi nào đó mà tất cả mọi người sử dụng hoặc tôi đang nghĩ đến việc làm nó một cách sai lầm và là có một cách đơn giản tốt hơn.. (Mục đích của tôi là không phải liên tục suy nghĩ về việc áp dụng toán tử% hoặc bất kỳ hàm tương tự nào trên nó).
Edit: Tôi quyết định viết một riêng tôi cũng chỉ để cho vui: http://github.com/robertmassaioli/wrapping_number
As far như tôi biết không có "tiêu chuẩn công nghiệp" cho loại điều này - như thư viện Boost, nếu đó là ý của bạn. Nhưng như bạn đã nói, cần phải dễ dàng thực hiện một lớp như vậy và quá tải tất cả các toán tử cần thiết. –
Sử dụng nhận xét thay vì trả lời vì 1) Tôi chưa bao giờ sử dụng nó và 2) Nó chưa phải là thư viện Boost chính thức nhưng: Boost.ConstrainedValue có một "wrap_int" trông rất giống với những gì bạn đang tìm kiếm: http: //student.agh.edu.pl/~kawulak/constrained_value/constrained_value/tutorial.html#constrained_value.tutorial.other_error_policies_for_bounded_objects –
@Eric: Đó chính xác là những gì tôi đang tìm kiếm nhưng nó chưa nằm ngoài các thư viện tăng cường. Tôi đã thử nhìn xung quanh và không thể tìm thấy một thực hiện tham chiếu. Tôi sẽ tiếp tục tìm kiếm nhưng bạn có biết nó ở đâu không? –