Добрый день. На хабре была
статья об Rust, точнее об одном его аспекте - как создавать новые типы и сделать автоматические преобразования между ними на примере Цельсий-Фаренгейтов. А есть что-нибудь подобное на С++? Мне нужно будет написать программку, которая работает с физическими величинами, и там хотелось бы физические величины хранить не во float а в своих типах, чтобы как минимум компилятор проверял меня на ошибки вида "прибавил к температуде (в градусах) длинну (в метрах)". + Ту же переменную с температурой мне где-то по коду нужно иметь в цельсиях, где-то в кельвинах, а на выходе пользователь вообще может захотеть увидеть результат в фаренгейтах, т.е. хотелось бы быстро эту переменную преобразовать в разные типы. Думал сделать так:
typedef float Celsius;
typedef float Fahrenheit;
class Temperature
{
public:
Fahrenheit toFahrenheit();
Celsius toCelsius() ;
bool setTemperature(Celsius temperature);
bool setTemperature(Fahrenheit temperature);
}
Но оказывается перезагрузка функций и typedef не дружат, можно только оборачивать типы в структуры вот так:
typedef struct
{
float temperature;
} Celsius;
typedef struct
{
float temperature;
} Fahrenheit;
Но это потом неудобно использовать. В С++ по-простому такое не реализовать?
Тут ещё подумалось - а в Python подобное можно сделать? Всё равно хотел на нём попробовать что-нибудь написать.