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?