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?

questionAnswers(9)

yourAnswerToTheQuestion