Boost.Icl有四种区间类型: 关闭[a,b]以获得< = x< = b, 打开(a,b)a< x< b, 左开(a,b)为< x< = b, rigth-open [a,b)对于< = x< b。
这对于具有显式最小值和最大值的类型来说已经足够了:double
,所有整数,boost::time_interval
,boost::ptime
,...
但是有类似string
和vector
的类型,它们具有最小值(即空字符串)但不是最大值。无法定义具有无限右端点的区间。
间隔(以及具有无限右端的间隔)对字符串和向量有意义,用于分片。
最简单的解决方案似乎使用tuple<bool, string>
代替string
(true表示无穷大,因此这样的一对将比任何字符串都大)。但它会迫使我在程序中的任何地方使用该对而不是字符串(或者在任何间隔操作之前创建对,这意味着字符串复制)。
有更好的解决方案吗? 也许在Icl中添加第5和第6个区间类型:closed_to_infinity [a,+ inf]和open_to_infinity(a,+ inf)?