Como lidar com unidades na interface c ++
Atualmente estou projetando uma API onde eu quero que o usuário seja capaz de escrever código como este:
PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);
Atualmente fazemos isso usando define como:
#define mV *1.0e-03
Isso torna muito conveniente para o usuário escrever seu código e também é muito legível, mas é claro que também tem desvantagens:
int ms;
Vai lançar alguns erros do compilador que são difíceis de entender. Então estou procurando uma solução melhor.
Eu tentei o novo C ++ 11 literais, mas com isso tudo que eu poderia conseguir é:
long double operator "" _mV(long double value) {
return value * 1e-3;
}
PowerMeter.forceVoltage(1_mV);
No final, a API não se importa com a unidade, como Volt ou segundo, mas só pega o número, então eu não quero fazer nenhuma verificação se você realmente insere Volts em forceVoltage ou não. Então isso também deve ser possível:
PowerMeter.forceVoltage(2 ms);
Alguma ideia além de ficar com as define?