Cómo manejar unidades en la interfaz c ++

Actualmente estoy diseñando una API en la que quiero que el usuario pueda escribir código como este:

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

Actualmente lo hacemos utilizando definiciones como:

#define mV *1.0e-03

Esto hace que sea muy conveniente para el usuario escribir su código y también es muy legible, pero por supuesto también tiene inconvenientes:

int ms;

Lanzará algunos errores de compilación que son difíciles de entender. Así que estoy buscando una mejor solución.

Probé los nuevos literales de C ++ 11, pero con esto todo lo que pude lograr es:

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

Al final, a la API no le importa la unidad como Volt o la segunda, pero solo toma el número, así que no quiero verificar si realmente ingresa voltios en forceVoltage o no. Así que esto también debería ser posible:

PowerMeter.forceVoltage(2 ms);

¿Alguna idea además de quedarse con el define?

Respuestas a la pregunta(9)

Su respuesta a la pregunta