【发布时间】:2010-09-28 10:05:14
【问题描述】:
我目前正在编写的代码中有一个很常见的问题,即我希望有一个整数,该整数只能存在于范围为 [start, end) 的某个范围内。基本上我希望能够执行以下操作:
cyclic_int ci(4, 8);
ci = 4;
assert(ci == 4);
ci += 3;
assert(ci == 7);
ci += 2;
assert(ci == 5);
assert(ci == 13);
这一切都应该返回 true。基本上,该类会自动为我应用模数 (%),并且整数在我初始化它的范围内充当循环整数。我可以自己实现这个类并重载所有常见的运算符以使其与普通整数很好地工作,但它似乎是一个有用的类,有人可能以前做过。
所以我的问题是,是否有一个像这样的通用类在某个地方每个人都在使用,或者我是否正在考虑以错误的方式进行操作,是否有更好更简单的方法。 (我的目标是不必经常考虑应用 % 运算符或任何类似的函数)谢谢。
编辑:我决定自己写一个,只是为了好玩:http://github.com/robertmassaioli/wrapping_number
【问题讨论】:
-
据我所知,这类东西没有“行业标准”——比如 Boost 库,如果你是这个意思的话。但正如您所说,实现这样一个类并重载所有必要的运算符应该很容易。
-
使用评论而不是答案,因为 1)我从未使用过它 2)它还不是官方的 Boost 库,但是:Boost.ConstrainedValue 有一个“wrapping_int”,看起来与你的非常相似'正在寻找:student.agh.edu.pl/~kawulak/constrained_value/constrained_value/…
-
@Eric:这正是我一直在寻找的,但它还不是 boost 库的一部分。我试着环顾四周,找不到参考实现。我会继续寻找,但你知道一个在哪里吗?
-
在 boost-announce 邮件列表上查看审核结果帖子,其中包含指向来源的链接:lists.boost.org/boost-announce/2010/09/0265.php
-
@Eric 真棒,把评论变成答案,我会给你。谢谢。
标签: c++ class integer encapsulation modulus