#c #boost #intervals
#c #повышение #интервалы
Вопрос:
Boost.Icl имеет четыре типа интервалов: закрытый [a, b] для a<=x<=b, открытый (a,b) для a<x<b, оставленный открытым (a,b] для a<x<=b, справа открытый [a, b) для a<=x<b.
Этого достаточно для типов, которые имеют явные минимальные и максимальные значения: double
, все целые числа, boost::time_interval
, boost::ptime
, … Но есть такие типы, как string
и vector
, которые имеют минимальное значение (т. е. пустую строку), но не максимальное. Это делает невозможным определение интервала с бесконечной правой конечной точкой. Интервалы (и интервалы с бесконечным правым концом) имеют смысл для строк и векторов, для сегментирования.
Простейшее решение похоже на использование tuple<bool, string>
вместо string
(true означает бесконечность, поэтому такая пара будет больше любой строки). Но это заставит меня использовать пару вместо строки везде в программе (или создавать пары перед любой интервальной операцией, что подразумевает копирование строки).
Есть ли лучшее решение? Может быть, добавить 5-й и 6-й типы интервалов в Icl: closed_to_infinity [a, inf) и open_to_infinity (a, inf)?