Подумайте, как бы вы хотели использовать это, и пусть это направляет вас.Например, какие единицы измерения вы хотите представить?Какими будут ваши базовые подразделения?Как следует обрабатывать преобразования между единицами измерения?
Сразу я думаю, мы можем видеть, что вам понадобится какой-то способ представления единицы измерения, например, футы, метры, литра, фарлонги, градусы,килограммы, фунты, кюри, омы и т. д. Это, кажется, класс или серия классов - возможно, Unit в качестве основы, с футами, метрами, литрами, Furlongs в качестве подклассов.Тогда я думаю, что вам нужен какой-то способ связать единицу со значением.Эта единица / значение должна обеспечивать какой-либо способ преобразования единиц измерения одного типа (длина / расстояние, объем, температура, масса / вес) и быть достаточно ярким, чтобы вызвать разумное исключение, если вызывающий код пытается что-то подозрительно (например, преобразование 27 градусов по Цельсию в мили / час).Будет удобен некоторый удобный способ создания экземпляров единиц / значений.Единица единицы / значения не должна быть привязана к определенному виду или классу единиц, но, к счастью, должна быть в состоянии справиться с любой единицей, которую ты хочешь бросить в нее.быть великим:
UnitValue a, b, c;
a = new UnitValue(3 * 5280, Feet);
b = new UnitValue(180, Seconds);
c = (a / b).As(Miles / Hours);
cout << c;
, мы надеемся, должны напечатать что-то вроде
60 miles/hour
Таким образом, вы можете видеть, что деление одного UnitValue на другое UnitValue должно привести к созданию нового UnitValue с составным модулем - в данном случаеa / b
должен генерировать UnitValue с единицами футов в секунды (футы / секунды), которые затем конвертируется As
в другое значение, в данном случае миль в час.
Я надеюсь, что этопомогает вам задуматься.
Делитесь и наслаждайтесь.