Jestem obecnie projektowaniu API, gdzie chcę, aby użytkownik, aby móc napisać kod tak:Jak obsługiwać jednostki w C++ interfejs
PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);
Obecnie robimy to za pomocą definiuje takie jak:
#define mV *1.0e-03
to sprawia, że bardzo wygodne dla użytkownika, aby napisać swój kod, a to jest bardzo czytelny, ale oczywiście ma wady też:
int ms;
Rzucenie niektórych błędów kompilatora, które są trudne do zrozumienia. Więc szukam lepszego rozwiązania.
próbowałem nowego C++ 11 literały, ale to wszystko, co mogłem osiągnąć to:
long double operator "" _mV(long double value) {
return value * 1e-3;
}
PowerMeter.forceVoltage(1_mV);
w końcu API nie dba o jednostce jak Volt czy drugi, ale trwa tylko liczby , więc nie chcę robić żadnego sprawdzenia, czy naprawdę wpisujesz Volts in forceVoltage, czy nie. To powinno być również możliwe:
PowerMeter.forceVoltage(2 ms);
Każdy pomysł oprócz pozostania z definicjami?
Czy możesz przekazać swoje jednostki jako oddzielną zmienną? 'PowerMeter.forceVoltage (2," ms ");' A może całe wyrażenie jako ciąg znaków? – Blender
Mogłem to zrobić, ale nie jest to naturalny sposób, w jaki użytkownik chciałby programować. – schnaufi
Dlaczego ... Czy chcesz określić jednostki miary, ale nie chcesz sprawdzić, czy są prawidłowe? To nie ma sensu. Co więcej, twój "użytkownik" zna C++, ale troszczy się o "naturalną drogę" ... Prawie nie do pomyślenia. Dlaczego nie uwzględnić go po prostu w nazwie funkcji? – keltar