История изменений
Исправление ilammy, (текущая версия) :
Лол, прямо общелиспом повеяло. МОЖНАСДЕЛАТЬ.
На брейнфаке тоже можно. Вон там кто-то уже СДЕЛАЛ для Буста.
Лол да не надо ничего этого. Вы ребята рли упоротые. Достаточно просто определить интерфейс, в котором все ф-и на Percent (типа +/-) принимает санку с веткой для случая ошибки. И ВСЕ. Гораздо проще чем с зависимыми типами, проще в использовании, более гибко - при этом гарантии точно такие же, лол.
Что, по-твоему, вон тот LimitedInteger должен был делать? Именно что переопределять все operator+() и бросаться исключениями, если значение выходит за диапазон. Но все эти контракты будут проверяться динамически. Вон те адовы типы могут (в принципе) выразить эту штуку статически; вот только я думаю, это вызовет адов геморрой для окружающей программы, если вообще окажется вычислимым.
Исходная версия ilammy, :
Лол, прямо общелиспом повеяло. МОЖНАСДЕЛАТЬ.
На брейнфаке тоже можно. Вон там будет кто-то СДЕЛАЛ для Буста.
Лол да не надо ничего этого. Вы ребята рли упоротые. Достаточно просто определить интерфейс, в котором все ф-и на Percent (типа +/-) принимает санку с веткой для случая ошибки. И ВСЕ. Гораздо проще чем с зависимыми типами, проще в использовании, более гибко - при этом гарантии точно такие же, лол.
Что, по-твоему, вон тот LimitedInteger должен был делать? Именно что переопределять все operator+() и бросаться исключениями, если значение выходит за диапазон. Но все эти контракты будут проверяться динамически. Вон те адовы типы могут (в принципе) выразить эту штуку статически; вот только я думаю, это вызовет адов геморрой для окружающей программы.