Boost.Icl как определить бесконечную конечную точку для типов без бесконечности?

#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)?