Umgang mit Einheiten in der C ++ - Schnittstelle

Ich entwerfe derzeit eine API, in der der Benutzer Code wie folgt schreiben soll:

PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);

Gegenwärtig verwenden wir dazu folgende Definitionen:

#define mV *1.0e-03

Dies macht es dem Benutzer sehr bequem, seinen Code zu schreiben, und es ist auch sehr lesbar, hat aber natürlich auch Nachteile:

int ms;

Wirft einige Compiler-Fehler, die schwer zu verstehen sind. Ich suche nach einer besseren Lösung.

Ich habe die neuen C ++ 11-Literale ausprobiert, aber damit konnte ich nur Folgendes erreichen:

long double operator "" _mV(long double value) {
  return value * 1e-3;
}
PowerMeter.forceVoltage(1_mV);

Am Ende kümmert sich die API nicht um die Einheit wie Volt oder Sekunde, sondern nimmt nur die Zahl, so dass ich nicht prüfen möchte, ob Sie wirklich Volt in ForceVoltage eingeben oder nicht. Das sollte also auch möglich sein:

PowerMeter.forceVoltage(2 ms);

Irgendeine Idee, außer bei den Definitionen zu bleiben?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage