Здравствуйте, Pzz, Вы писали:
S>>И это мы еще не рассматривали такие мощные инструменты для создания абстракций, как классы и шаблоны. Например, как вы в чистом C выразите абстракцию "значение в заданном диапазоне", которая на C++ делается влет простым шаблоном вроде:
Pzz>Я что-то не понял, а операции + и — для этого constrained_value современный компилятор сам выведет, или их тоже надо руками расписать?
В том-то и дело, что для простейшего случая это и не нужно. В нем есть операция приведения к типу T, поэтому показанный тривиальный constrained_value можно использовать вот так, например:
my_range get_current_value() {
my_range raw = read_raw_value(); // Гарантия того, что в raw допустимое значение.
short tmp = static_cast<short>(raw) * 10; // Вот тут все гарантии потерялись.
if(specific_moon_phase())
tmp += 135;
if(some_time_of_day())
tmp /= 3;
return my_range{tmp}; // Здесь появляется гарантия того, что возвращается допустимое значение.
}
Теперь хотелось бы посмотреть на это в чистом С.