Boost.Icl如何为没有无穷大的类型定义无限端点?
Boost.Icl 有四种间隔类型: 对于 a<=x<=b,闭合 [a,b], 对于 a
对于具有明确最小值和最大值的类型来说,这已经足够了:double
、所有整数、boost::time_interval
、boost::ptime
、.. 。 但也有像 string
和 vector
这样的类型,它们具有最小值(即空字符串),但没有最大值。无法定义具有无限右端点的区间。 间隔(以及具有无限右端的间隔)对于字符串和向量以及分片有意义。
最简单的解决方案看起来像是使用 tuplestring
(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论