Jak obsługiwać jednostki w interfejsie c ++
Obecnie projektuję interfejs API, w którym chcę, aby użytkownik mógł pisać kod w ten sposób:
PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);
Obecnie robimy to za pomocą definicji takich jak:
#define mV *1.0e-03
To sprawia, że bardzo wygodnym dla użytkownika jest napisanie kodu i jest on również bardzo czytelny, ale oczywiście ma również wady:
int ms;
Wystąpią pewne błędy kompilatora, które są trudne do zrozumienia. Więc szukam lepszego rozwiązania.
Próbowałem nowych literałów C ++ 11, ale dzięki temu mogłem osiągnąć tylko:
long double operator "" _mV(long double value) {
return value * 1e-3;
}
PowerMeter.forceVoltage(1_mV);
W końcu interfejs API nie troszczy się o jednostkę, taką jak wolt lub sekunda, ale pobiera tylko liczbę, więc nie chcę sprawdzać, czy rzeczywiście wprowadzasz napięcie w napięciu forceVoltage lub nie. To powinno być również możliwe:
PowerMeter.forceVoltage(2 ms);
Jakikolwiek pomysł oprócz pozostania przy definicjach?