Boost.Icl如何为没有无穷大的类型定义无限端点?

发布于 2024-11-07 08:42:08 字数 565 浏览 1 评论 0原文

Boost.Icl 有四种间隔类型: 对于 a<=x<=b,闭合 [a,b], 对于 a

对于具有明确最小值和最大值的类型来说,这已经足够了:double、所有整数、boost::time_intervalboost::ptime、.. 。 但也有像 stringvector 这样的类型,它们具有最小值(即空字符串),但没有最大值。无法定义具有无限右端点的区间。 间隔(以及具有无限右端的间隔)对于字符串和向量以及分片有意义。

最简单的解决方案看起来像是使用 tuple代替 string (true 表示无穷大,因此这样的一对将比任何字符串都大)。但这将迫使我在程序中的任何地方使用对而不是字符串(或者在任何间隔操作之前创建对,这意味着字符串复制)。

有更好的解决方案吗? 也许要在 Icl 中添加第五和第六个间隔类型: close_to_infinity [a,+inf) 和 open_to_infinity (a,+inf) ?

Boost.Icl has four interval types:
closed [a,b] for a<=x<=b,
open (a,b) for a<x<b,
left-open (a,b] for a<x<=b,
rigth-open [a,b) for a<=x<b.

That's enough for types which have explicit minimal and maximal values: double, all integers, boost::time_interval, boost::ptime, ...
But there are types like string and vector, which have the minimal value (i.e. empty string) but not the maximal one. It makes impossible to define an interval with infinite right endpoint.
Intervals (and intervals with infinite right end) have sense for strings and vectors, for sharding.

Simplest solution looks like to use tuple<bool, string> in place of string (true means infinity so such a pair will be bigger than any string). But it will force me to use the pair instead of string everywhere in the program (or to create pairs before any interval operation, which implies string copying).

Is there a better solution?
Maybe to add a 5th and 6th interval types into Icl: closed_to_infinity [a,+inf) and open_to_infinity (a,+inf) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文